2010-01-21 39 views
24

Si bien el aprendizaje MySQL, he leído que se puede realizar la siguiente declaración al agregar una columna a una tabla de MySQL:¿El orden de las columnas importa en sus tablas MySQL?

ALTER TABLE contacts ADD email VARCHAR(60) AFTER name; 

o

ALTER TABLE contacts ADD email VARCHAR(60) FIRST; 

¿Cuándo querrá hacer esto? ¿Se puede utilizar el orden de las columnas para fines de optimización de consultas? ¿Las Longblobs deberían ser la última columna para optimizar el consumo de espacio? ¿O existen estos comandos por alguna otra razón?

+0

Nunca he notado una diferencia en rendimiento, pero tampoco comparé nunca. Siempre pensé que era principalmente una cuestión de usabilidad, permitiéndome configurar las columnas en orden lógico, incluso si volvía y añadí una más tarde. – ceejayoz

+2

Consulte http://stackoverflow.com/questions/894522/is-here-any-reason-to-worry-about-the-column-order-in-a-table, que sugiere que hay un impacto en el rendimiento. – Matchu

Respuesta

0

No, no debería importar. Una base de datos normalizada no debería tener restricciones en el orden de las columnas, también.

6

Esto sin embargo afectará el orden del resultado en select * from mytable.

Es por eso que siempre debe nombrar la columna en la instrucción de selección, p. select col1, col2 from mytable. Pero si sabe que la aplicación está usando *, debe tener cuidado cuando agrega una columna.

De lo contrario, solicite la columna para que sea lo más lógico de entender. Si afecta el rendimiento, significa que ya está en el lado oscuro del ajuste del rendimiento de la base de datos y probablemente tenga un problema en otro lugar.

0

orden de la columna no importa. Esta es una característica puramente práctica. solo para permitirle reestructurar su tabla de base de datos de la manera que desee después de que se haya creado.

0

El modelo relacional no tiene ningún concepto de ordenamiento de columnas dentro de las filas y ningún concepto de ordenamiento de filas dentro de las tablas.

6

La pregunta no tiene nada que ver con el modelo relacional o SQL. Es una pregunta de rendimiento.

En algunas bases de datos, es más eficiente ordenar las columnas de una manera específica debido a la forma en que se realiza el acceso al disco. Si hay una ventaja significativa es específico de la plataforma, también. Es un problema de E/S de bajo nivel relacionado con la forma en que se diseña el almacenamiento subyacente y la forma en que el motor accede a él. Los proveedores de motores propietarios generalmente brindan esta información a través de sus departamentos de educación y capacitación.

Creo que tendrías que hablar con alguien que conozca los detalles esenciales del modelo de almacenamiento y los métodos de E/S para MySQL en tu plataforma específica o alguien que haya marcado esto en tu plataforma para obtener un responder.

Es muy posible que lo coloquen en el disco de manera optimizada y oculten ese pedido de columnas.

1

Pensé que no tiene nada que ver con el rendimiento, pero en algunos casos, cuando usa índices.

Ejemplo.

He usado tabla de unión:

| category_id | user_id | 

Ambas columnas fueron unsigned int (10) y primary key (category_id, user_id) atención de pago en el orden de las columnas. Cuando comencé a seleccionar de esa tabla con where user_id = ?, el rendimiento fue bajo.

Después de cambiar el orden de las columnas (primero hice user_id) comenzó a seleccionar veces más rápido.

+1

http://dev.mysql.com/doc/refman/5.6/en/multiple-column-indexes.html – NovaDenizen

+2

El orden de las columnas en un índice compuesto es importante, pero eso no tiene nada que ver con el orden de las columnas en la tabla . (Por lo tanto, esta 'respuesta' no aborda la 'pregunta'). –

1

A "¿Cuándo quieres utilizar esto?" En lugar de un problema de rendimiento.

La duplicación basada en filas se interrumpirá si el orden de las columnas difiere entre maestro y esclavo y los tipos de columna son incompatibles (Error 1677).

ALTER TABLE contactos MODIFICAR correo electrónico VARCHAR (60) DESPUÉS nombre;

sería una forma de corregir este problema.

Cuestiones relacionadas