Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gibt es Grund, sich Gedanken über die Spaltenreihenfolge in einer Tabelle zu machen?

Die Spaltenreihenfolge hatte einen großen Einfluss auf die Leistung einiger der Datenbanken, die ich optimiert habe, darunter Sql Server, Oracle und MySQL. Dieser Beitrag enthält gute Faustregeln :

  • Primärschlüsselspalten zuerst
  • Fremdschlüsselspalten als nächstes.
  • Häufig gesuchte Spalten weiter
  • Häufig aktualisierte Spalten später
  • Nullbare Spalten zuletzt.
  • Am wenigsten verwendete Nullable-Spalten nach häufiger verwendeten Nullable-Spalten

Ein Beispiel für Leistungsunterschiede ist eine Indexsuche. Die Datenbank-Engine findet eine Zeile basierend auf einigen Bedingungen im Index und erhält eine Zeilenadresse zurück. Angenommen, Sie suchen nach SomeValue, und es steht in dieser Tabelle:

 SomeId int,
 SomeString varchar(100),
 SomeValue int

Die Engine muss erraten, wo SomeValue beginnt, da SomeString eine unbekannte Länge hat. Wenn Sie jedoch die Reihenfolge ändern in:

 SomeId int,
 SomeValue int,
 SomeString varchar(100)

Jetzt weiß die Engine, dass SomeValue 4 Bytes nach dem Beginn der Zeile zu finden ist. Die Spaltenreihenfolge kann sich also erheblich auf die Leistung auswirken.

BEARBEITEN:Sql Server 2005 speichert Felder mit fester Länge am Anfang der Zeile. Und jede Zeile hat einen Verweis auf den Beginn eines Varchar. Dies negiert vollständig den Effekt, den ich oben aufgeführt habe. Bei neueren Datenbanken hat die Spaltenreihenfolge also keine Auswirkung mehr.