¿Por qué se recomienda que mysql tenga un valor predeterminado en lugar de nulo?

1.Texto original oficial

Primero, antes de comprender este problema, leamos el texto original del documento oficial de MySQL:
Insertar descripción de la imagen aquí

Las columnas NULL requieren espacio adicional en la fila para registrar si sus valores son NULL. Cada columna NULL requiere un bit adicional, redondeado al byte más cercano. Permítanme traducir: las columnas NULL requieren espacio adicional en la fila para registrar si sus valores ​​son
NULL
.NULL. Cada columna vacía requiere un bit adicional, redondeado al byte más cercano

Mucha gente dice que nulo no ocupa espacio en la base de datos, lo que significa que esta respuesta está naturalmente rota. El funcionario dijo que las columnas nulas requieren espacio adicional para registrarse. Naturalmente, si se necesita espacio, también podemos pasar la Prueba para ver
el Efecto específico:
Insertar descripción de la imagen aquí
de este SQL, podemos ver claramente que la longitud de la cadena vacía es 0, que no ocupa espacio; 1 ocupa una longitud y la longitud de nulo es nulo, como arriba La figura dice que nulo requiere espacio adicional en la línea para registrar si son nulos, pero en realidad ocupa espacio.

No solo eso, nulo y la mayoría de los cálculos no producirán resultados. Solo producirán un nulo. Las únicas
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
palabras clave que se pueden vincular a nulo son las pocas palabras clave proporcionadas por mysql, es nulo, no es nulo, <=>, e incluso El = comúnmente utilizado no tiene nada que ver con nulo (mysql devuelve 1 para verdadero y 0 para falso)
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
e incluso afecta el resultado final en algunos cálculos de funciones:
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí
Aunque la función de conteo (campo) no la usamos comúnmente, se puede ver claramente que tiene un impacto en los resultados del cálculo. El número de conteo (campo) es definitivamente menor o igual que el conteo (*)

Tomando prestada una frase de Zhihu@gekexiaojun:
En un sentido popular: ('') Un valor nulo de cadena es como una copa de transición al vacío, sin nada dentro, mientras que un valor NULL es una copa llena de aire, aunque todos tienen el mismo aspecto. , pero hay diferencias esenciales

2. Peligros ocultos de establecer un valor nulo

En MySQL, existen varias razones principales por las que no se recomiendan los campos NULL:

  1. Coherencia de los datos: los valores NULL pueden introducir inconsistencia en los datos. Cuando se permite que un campo sea NULL, no puede contener ningún valor, lo que puede generar resultados inesperados al consultar y procesar los datos. Por ejemplo, el uso de valores NULL para cálculos matemáticos puede generar resultados inesperados.

  2. Complejidad de la consulta: el uso de valores NULL puede aumentar la complejidad de la consulta. Al consultar datos, debe manejar casos especiales de valores NULL, como fallas de operación causadas por valores nulos en algunos campos, lo que puede aumentar la complejidad de la lógica y el código de consulta.

  3. Espacio de almacenamiento: los valores NULL requieren espacio de almacenamiento adicional. Para cada campo que permite NULL, MySQL necesita reservar espacio adicional para que el campo represente valores NULL, lo que aumenta los requisitos de almacenamiento de la tabla de datos.

  4. Eficiencia del índice: los valores NULL pueden reducir la eficiencia del índice. Cuando se permite que un campo sea NULL, el índice de ese campo puede volverse más grande y más escaso, lo que tendrá un cierto impacto en el rendimiento de la consulta. En MySQL, puede utilizar índices cuando utilice condiciones de consulta IS NULL. Pero se deben cumplir algunas condiciones antes de poder utilizarlo.
    4.1 Los valores NULL son raros. Cuando hay muchos valores NULL, MySQL puede optar por abandonar el uso del índice y realizar un escaneo completo de la tabla, porque para la mayoría de las filas, un escaneo completo de la tabla es más rápido que usar un índice.
    4.2 y no hay valores duplicados en la columna de índice. Si hay valores NULL duplicados en una columna indexada, MySQL puede abandonar el uso del índice porque es necesario escanear varias entradas del índice para encontrar valores NULL en el índice.
    4.3 Utilice el operador igual en lugar de IS NULL. Si consulta con =NULL, es posible que MySQL no use el índice porque el operador igual no funciona para valores NULL.

3. Resumen

Al diseñar el esquema de la base de datos, si se espera que un campo almacene valores, puede usar valores predeterminados o restricciones no nulas para evitar la generación de valores NULL. El uso de valores predeterminados garantiza que un campo siempre contenga un valor válido y una restricción no nula exige que no se permita que el campo sea nulo. Esto simplifica la lógica de consulta y mejora el rendimiento y la confiabilidad de la base de datos. Si un campo realmente necesita almacenar valores desconocidos o faltantes, considere usar un valor de marcador de posición especial en lugar de NULL, como una cadena vacía ("") o un valor de identificación específico.

Supongo que te gusta

Origin blog.csdn.net/weixin_52796198/article/details/131538878
Recomendado
Clasificación