sql >> Base de Datos >  >> RDS >> Mysql

¿Hay alguna razón para preocuparse por el orden de las columnas en una tabla?

El orden de las columnas tuvo un gran impacto en el rendimiento de algunas de las bases de datos que ajusté, que abarcan Sql Server, Oracle y MySQL. Esta publicación tiene buenas reglas generales :

  • Columnas de clave primaria primero
  • Columnas de clave externa a continuación.
  • Columnas más buscadas a continuación
  • Columnas actualizadas con frecuencia más adelante
  • Las columnas anulables son las últimas.
  • Columnas anulables menos usadas después de columnas anulables usadas con más frecuencia

Un ejemplo de diferencia en el rendimiento es una búsqueda de índice. El motor de la base de datos encuentra una fila en función de algunas condiciones en el índice y obtiene una dirección de fila. Ahora digamos que está buscando SomeValue, y está en esta tabla:

 SomeId int,
 SomeString varchar(100),
 SomeValue int

El motor tiene que adivinar dónde comienza SomeValue, porque SomeString tiene una longitud desconocida. Sin embargo, si cambia el orden a:

 SomeId int,
 SomeValue int,
 SomeString varchar(100)

Ahora el motor sabe que SomeValue se puede encontrar 4 bytes después del comienzo de la fila. Por lo tanto, el orden de las columnas puede tener un impacto considerable en el rendimiento.

EDITAR:Sql Server 2005 almacena campos de longitud fija al comienzo de la fila. Y cada fila tiene una referencia al inicio de un varchar. Esto niega por completo el efecto que he enumerado anteriormente. Entonces, para las bases de datos recientes, el orden de las columnas ya no tiene ningún impacto.