2011-06-10 27 views

Respuesta

6

Si configura un campo como not null tomará menos espacio en MyISAM.
Configurarlo para aceptar null hará que ocupe más espacio en MyISAM.

En InnoDB null los valores ocupan menos espacio, por lo que podría funcionar allí.

Si utiliza un campo blob, MySQL lo almacenará en un archivo diferente de todos modos.

alternativa (mi recomendación)
Otra opción es no agregar el campo a esta mesa, pero para hacer

table extra_data 
    id integer primary key 
    big_table_id integer 
    large_data_seldom_used varchar(65000) 

Si es necesario seleccionar los datos adicionales hacen:

SELECT large_data_seldom_used FROM bigtable b 
INNER JOIN extra_data e ON (e.big_table_id = b.id) 

De esta manera no tiene que agregar ningún campo extra a la tabla grande, ahorrando mucho espacio si rara vez se usa el campo extra.

+0

"_En InnoDB los valores nulos ocupan menos espacio_" - si la tabla utiliza el formato de fila REDUNDANTE , esto solo es cierto para las columnas de longitud variable. –

5

Esto se trata en el capítulo del manual de MySQL en Storage Requirements. No hay una respuesta simple; depende del tipo de datos de la columna, si la columna está indexada; y el motor de almacenamiento. El impacto de usar NULL para una columna puede variar de cero a varios bytes (dependiendo de cuántas otras columnas también sean NULL-able).

El impacto de almacenamiento al declarar una columna como que acepta NULL y de almacenar un NULL valor, es probablemente menor Tener una columna con muchos valores NULL a menudo indica una necesidad de (más) normalización.

La regla básica es diseñar su esquema basándose en las propiedades de los datos, no en el impacto del almacenamiento. Arregle las cosas solo si resultan ser un problema.

Cuestiones relacionadas