2010-12-15 11 views
8

Wir haben eine Reihe von großen und kleinen Projekten - die meisten (wenn nicht alle) verwenden mindestens eine SQL Server DB. Alle von ihnen haben unterschiedliche Umgebungen eingerichtet. In der Regel: dev (1+), QA, UAT, Live. Es ist auch üblich, dass wir verschiedene Code-Updates in verschiedenen Umgebungen unabhängig voneinander veröffentlichen. Natürlich einige dieser Updates kommen mit Schema-Update-Skripte wieIst die Reihenfolge der Spalten in der Tabelle wichtig?

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

Manchmal von Hand gemacht, ein anderes Mal mit Red Gate SQL/Daten vergleichen.

Egal, wo ich damit gehe ist, dass oft verschiedene Umgebungen für das gleiche Projekt mit unterschiedlicher Reihenfolge der Spalten enden. Ist das ein Problem? Ich weiß nicht wirklich ... Hat die Spaltenreihenfolge irgendwelche Auswirkungen auf die Leistung? Alles, was ich vermissen könnte?

Antwort

8

Nein, die Spaltenreihenfolge ist nicht signifikant. Tatsächlich kann die Reihenfolge, in der Spaltendaten auf der Festplatte gespeichert werden, von der Reihenfolge in den Clienttools abweichen, da die Engine die Daten neu anordnet, um den Speicherplatz und die Lese-/Schreibleistung zu optimieren (mehrere Bitfelder an einem einzigen Speicherort ablegen) , Spalten an Speichergrenzen ausrichten, usw.)

+0

@marc_s: natürlich gibt es Referenzen ... http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx oder MSDN/BOL too – gbn

3

Nicht wirklich - in 95% Ihrer Fälle gibt es keinen Unterschied in der Reihenfolge der Spalten. Und aus relationaler Sicht ist die Spaltenreihenfolge in einer Tabelle ohnehin irrelevant.

Es gibt einige Randfälle, in denen die Spaltenreihenfolge möglicherweise einen leichten Einfluss auf Ihre Tabelle hat, meistens, wenn Sie eine große Anzahl von Feldern variabler Größe (wie VARCHAR) haben. Aber diese Zahl muss wirklich groß sein, und Ihre Felder (ihre Größe) müssen wirklich massiv sein - in einem solchen Fall kann es nützlich sein, diese Felder variabler Größe am Ende der Tabelle in Bezug auf die Reihenfolge der Spalten zu platzieren.

Aber noch einmal: das ist wirklich eher ein seltener Randfall, eher als die Norm.

Beachten Sie auch: SQL Server hat keine Möglichkeit Spalten wirklich neu zu ordnen. Sie können dies im visuellen Tabellen-Designer tun - aber was SQL Server unter den Abdeckungen tut, ist eine neue Tabelle mit der gewünschten Spaltenreihenfolge zu erstellen, und dann werden alle Daten aus der alten Tabelle kopiert. Dies ist der Grund, warum dies eine sehr langwierige und zeitaufwendige Operation für große Tabellen ist.

+0

Ja, wissen über die Notwendigkeit, Tabelle neu zu reorganisieren Spalten, jedoch Charles Bretana scheinen zu sagen, dass die Reihenfolge der Spalten in SQL Studio ist nicht das gleiche wie es tatsächlich in der DB gespeichert, was ein bisschen widerspricht das? –

+0

@ liho1eye: Ja, ich war überrascht, das auch zu lesen - nicht sicher, ob das stimmt und auch keinen Hinweis darauf finden kann. –

+0

@ liho1eye, @marc_s: Wenn Sie sich Festplattenspeicher anschauen, kommen Spalten fester Länge zuerst und dann variable Länge. Das alte Sprichwort über "Strings Last" ist Müll IMHO. http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx oder MSDN/BOL zu – gbn

Verwandte Themen