2010-12-15 26 views
8

Nous avons un certain nombre de projets grands et petits - la plupart (sinon la totalité) d'entre eux utilisent au moins une base de données SQL Server. Tous ont des environnements différents mis en place. Typiquement: dev (1+), QA, UAT, Live. Il est également courant pour nous de publier différentes mises à jour de code dans différents environnements indépendamment les uns des autres. Bien entendu, certains de ces mises à jour viennent avec des scripts de mise à jour de schéma tels queL'ordre des colonnes dans le tableau est-il important?

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

Parfois, faites à la main, d'autres fois en utilisant Comparer Red Gate SQL/Data.

En tout cas où je vais avec ceci est que souvent les différents environnements pour le même projet finissent avec l'ordre différent des colonnes. Est-ce un problème? Je ne sais pas vraiment ... Est-ce que l'ordre des colonnes a des implications sur les performances? Quelque chose que je pourrais manquer?

Répondre

8

Non, l'ordre des colonnes n'est pas significatif. En réalité, l'ordre dans lequel les données de colonne sont stockées sur le disque peut être différent de celui que vous voyez dans les outils client, car le moteur réorganise les données pour optimiser l'espace de stockage et les performances de lecture/écriture. , alignement des colonnes sur les limites de la mémoire, etc ..)

+0

@marc_s: bien sûr, il existe des références ... http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx ou MSDN/BOL aussi – gbn

3

Pas vraiment - dans 95% de vos cas, il n'y a aucune différence dans l'ordre des colonnes. Et d'un point de vue théorique relationnel, l'ordre des colonnes dans un tableau n'est pas pertinent de toute façon.

Il y a quelques cas où l'ordre des colonnes peut avoir un léger impact sur votre table, le plus souvent lorsque vous avez un grand nombre de champs de taille variable (comme VARCHAR). Mais ce nombre doit être vraiment grand, et vos champs (leur taille) doivent être vraiment massifs - dans un tel cas, il peut être avantageux de mettre ces champs de taille variable à la fin de la table en termes de commande des colonnes.

Mais encore une fois: c'est vraiment plus un cas de bordure rare, plutôt que la norme.

En outre, gardez à l'esprit: SQL Server n'a aucun moyen de réorganiser les colonnes, vraiment. Vous pouvez le faire dans le concepteur de table visuel - mais ce que SQL Server fait sous les couvertures est de créer une nouvelle table avec l'ordre de colonne souhaité, puis toutes les données de l'ancienne table sont copiées. C'est la raison pour laquelle c'est une opération très fastidieuse et fastidieuse pour les grandes tables.

+0

Oui, sachez qu'il est nécessaire de recréer la table pour réorganiser les colonnes, mais Charles Bretana semble dire que l'ordre des colonnes dans SQL Studio n'est pas le même que celui réellement stocké dans la base de données, ce qui contredit cela? –

+0

@ liho1eye: oui, j'ai été surpris de lire ça aussi - je ne sais pas si c'est vrai et je ne trouve aucune référence à ce fait non plus. –

+0

@ liho1eye, @marc_s: si vous regardez le stockage sur disque, les colonnes de longueur fixe viennent d'abord, puis la longueur variable. Le vieil adage sur "les cordes durent" est de la foutaise à mon humble avis. http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx ou MSDN/BOL aussi – gbn