2010-12-15 27 views
8

Tenemos varios proyectos grandes y pequeños, la mayoría (si no todos) de ellos usan al menos un DB de SQL Server. Todos ellos tienen diferentes entornos configurados. Típicamente: dev (1+), QA, UAT, Live. También es común que liberemos varias actualizaciones de código en diferentes entornos de manera independiente. Naturalmente, algunos de esos cambios vienen con scripts de actualización de esquema como¿Importa el orden de las columnas en la tabla?

alter table foo add column bar 
go 
update foo set bar=... where ... 

A veces hace a mano, otras veces usando Red Puerta SQL/Comparación de datos.

De todos modos, a lo que voy con esto es que a menudo diferentes entornos para el mismo proyecto terminan con diferentes órdenes de columnas. ¿Es esto un problema? Realmente no sé ... ¿El orden de las columnas tiene alguna implicancia en el rendimiento? ¿Algo que podría estar perdiendo?

Respuesta

8

No, el orden de las columnas no es significativo. En realidad, el orden en que se almacenan los datos de columna en el disco puede ser diferente al orden que se ve en las herramientas del cliente, ya que el motor reordena los datos para optimizar el espacio de almacenamiento y el rendimiento de lectura/escritura (colocando múltiples campos de bits en una sola ubicación de memoria alineando columnas en los límites de la memoria, etc.)

+0

@marc_s: por supuesto, hay referencias ... http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx o MSDN/BOL demasiado – gbn

3

No realmente - en el 95% de sus casos, no hay diferencia en el orden de las columnas. Y desde un punto de vista teórico relacional, el orden de las columnas en una tabla es irrelevante de todos modos.

Existen algunos casos extremos en los que el orden de las columnas podría tener un ligero impacto en la tabla, generalmente cuando tiene una gran cantidad de campos de tamaño variable (como VARCHAR). Pero ese número debe ser realmente grande, y sus campos (su tamaño) deben ser realmente masivos; en tal caso, puede ser beneficioso colocar esos campos de tamaño variable al final de la tabla en términos de ordenar las columnas.

Pero otra vez: eso es realmente más un caso de borde raro, en lugar de la norma.

Además, tenga en cuenta que SQL Server no tiene forma de reordenar columnas, realmente. Puede hacerlo en el diseñador visual de tablas, pero lo que SQL Server hace bajo las cubiertas es crear una nueva tabla con el orden de columnas deseado, y luego se copian todos los datos de la tabla anterior. Esa es la razón por la cual esta es una operación muy tediosa y lenta para mesas grandes.

+0

Sí, sabemos sobre la necesidad de recrear la tabla para reordenar las columnas, sin embargo, Charles Bretana parece estar diciendo que el orden de las columnas en SQL Studio no es el mismo que el que realmente se almacena en la base de datos, ¿algo que contradice eso? –

+0

@ liho1eye: sí, me sorprendió leer eso también, no estoy seguro si eso es cierto y tampoco puedo encontrar ninguna referencia a ese hecho. –

+0

@ liho1eye, @marc_s: si observa el almacenamiento en disco, las columnas de longitud fija son primero, luego de longitud variable. El viejo adagio sobre "cuerdas dura" es basura en mi humilde opinión. http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx o MSDN/BOL too – gbn

Cuestiones relacionadas