En MySQL, ¿es mejor permitir siempre nulos a menos que sepa que se requiere un campo, o usar siempre a Not Null
menos que sepa que un campo contendrá nulos? ¿O no importa?
Sé que en algunos DBMS dicen que se use Not Null
tanto como sea posible porque permitir nulos requiere un bit adicional (¿o byte?) Por registro para almacenar el estado Nulo.
NULL
si y solo si elNULL
valor tiene una interpretación para lo que está modelando.Respuestas:
En la mayoría de las bases de datos, una
NOT NULL
columna será más eficiente en términos de datos almacenados por el motivo que establezca, y también más eficiente para consultar e indexar, por lo que, a menos que desee permitir NULL en una columna, debe rechazarlos explícitamente.Habrá una ligera implicación en el rendimiento, ya que las
NOT NULL
restricciones adicionales tendrán que verificarse potencialmente para cada fila que afecte con cualquier INSERTAR o ACTUALIZAR, pero como la mayoría de las bases de datos son relativamente leves para escribir y leer, esto probablemente no sea una preocupación (lo poco De todos modos, es poco probable que el tiempo adicional sea notable, ya que es una operación vinculada a la CPU donde el resto de la operación de inserción / actualización estará vinculada a las E / S y, por lo tanto, un cuello de botella mucho más significativo) y le brinda algo de "libre "comprobación de datos para que su código (o el código de otras personas) no pueda colocar NULL accidentalmente donde otro código no los espera y, por lo tanto, puede dar resultados incorrectos en su presencia.Editar: Como Peter señala en su comentario, lo anterior es un generalismo y puede no ser cierto para todos los DMBS, aunque estoy bastante seguro de que lo es para mysql y mssql. Otras complicaciones en el área pueden incluir características como tablas dispersas (como MSSQL 2008 implementado, por ejemplo) que alterarán la dinámica de rendimiento de las columnas (no) anulables.
fuente
Debe dejar que el diseño de su esquema y los requisitos de la aplicación guíen esta decisión. Las diferencias de rendimiento probablemente no se noten de ninguna manera en la mayoría de los casos.
fuente