Actualizar:
En MySQL
, puede haber una razón para hacer esto.
Dado que los tipos de datos variables (como VARCHAR
) se almacenan con longitudes variables en InnoDB
, el motor de la base de datos debe recorrer todas las columnas anteriores en cada fila para averiguar el desplazamiento de la dada.
El impacto puede llegar al 17% para las 20
columnas.
Vea esta entrada en mi blog para más detalles:
En Oracle
, las NULL
columnas finales no consumen espacio, por eso siempre debe ponerlas al final de la tabla.
También en Oracle
y en SQL Server
, en caso de una fila grande, ROW CHAINING
puede ocurrir un.
ROW CHANING
es dividir una fila que no encaja en un bloque y extenderla por varios bloques, conectados con una lista vinculada.
La lectura de las columnas finales que no encajan en el primer bloque requerirá recorrer la lista vinculada, lo que resultará en una I/O
operación adicional .
Consulte esta página para ver una ilustración de ROW CHAINING
en Oracle
:
Es por eso que debe colocar las columnas que usa a menudo al principio de la tabla y las columnas que no usa a menudo, o las columnas que tienden a serlo NULL
, al final de la tabla.
Nota IMPORTANTE:
Si le gusta esta respuesta y desea votar a favor, vote también a favor de @Andomar
la respuesta .
Él respondió lo mismo, pero parece haber sido rechazado sin ningún motivo.