Beeinträchtigt die Reihenfolge der Spalten die Leistung in Microsoft SQL Server 2012?

8

Ich habe gelesen, dass die varchar Felder als eine Spalte am Ende einer Datenbanktabelle platziert werden sollten - zumindest in MySQL. Der Grund dafür ist, dass die Varchar-Felder variable Länge haben und möglicherweise die Abfragen verlangsamen könnten. Meine Frage: Gilt das für MSSQL 2012 oder nicht? Soll ich meine Tabellen so gestalten, dass alle Textdaten am Ende jeder Datenbankzeile stehen oder nicht?

    
Zsolt 04.09.2012, 21:44
quelle

2 Antworten

8

Die Reihenfolge der Spalten in einer Tabelle wirkt sich nur sehr geringfügig auf die Leistung aus, verglichen mit der Performance des Datenbankentwurfs (Entitäten, Attribute und Beziehungen), des Transaktionsdesigns und des Abfragedesigns.

Um festzustellen, ob der Unterschied nicht vernachlässigbar ist, müssten Sie wirklich einige Tests durchführen und die Ergebnisse vergleichen.

Normalerweise gebe ich den Primärschlüssel als erste Spalte, dann den / die Fremdschlüssel und dann die natürlichen Schlüssel und häufig verwendete Spalten ein. Ich lege die längeren Saiten normalerweise gegen das Ende der Reihe. Aber das ist nicht unbedingt eine Leistungsoptimierung, so wie es eine Stilvorliebe ist, die ich aus Bequemlichkeit verwende.

Die Reihenfolge der Spalten kann sich auf die Größe der Zeile in SQL Server auswirken, wenn eine große Anzahl von Spalten in einer Zeile nullfähig ist und die meisten dieser Spalten NULL enthalten. SQL Server (wie Oracle) verfügt über eine Optimierung, bei der für Spalten, die NULL-Werte enthalten, am Ende der Zeile kein Speicherplatz reserviert ist. Einige Leerzeichen sind für jede Spalte in der Zeile reserviert, bis zum letzten Nicht-NULL-Wert in der Zeile.

Daraus ergibt sich, dass Sie, wenn Sie viele Nullable-Spalten haben, die Spalten, die am häufigsten NULL vor den Spalten sind, die am häufigsten NULL sind.

Hinweis: Beachten Sie, dass SQL Server die Spalten in einer Tabelle zuerst sortiert, ob die Spalte feste Länge oder variable Länge hat. Alle Spalten mit fester Länge werden zuerst gespeichert, gefolgt von allen Spalten mit variabler Länge. Innerhalb dieser Spaltengruppen (fest und variabel) werden die Spalten in der Reihenfolge gespeichert, in der sie definiert sind.

    
spencer7593 04.09.2012, 21:57
quelle
2

Wenn es darum geht, einen Index zu erstellen, ist die Spaltenreihenfolge wichtig .

  

Ein Indexschlüssel wird in der ersten Spalte des Indexes sortiert und dann in der nächsten Spalte innerhalb jedes Wertes der vorherigen Spalte gruppiert. Die erste Spalte in einem zusammengesetzten Index wird häufig als führende Kante des Indexes bezeichnet. Betrachten Sie zum Beispiel diese Tabelle:

%Vor%      

Wenn ein zusammengesetzter Index für die Spalten (c1, c2) erstellt wird, wird der Index wie in dieser Tabelle gezeigt angeordnet:

%Vor%      

Wie in der obigen Tabelle gezeigt, werden die Daten in der ersten Spalte ( c1 ) im zusammengesetzten Index sortiert. Innerhalb jedes Wertes der ersten Spalte werden die Daten in der zweiten Spalte ( c2 ) weiter sortiert.

     

Daher ist die Spaltenreihenfolge in einem zusammengesetzten Index ein wichtiger Faktor für die Wirksamkeit des Index. Sie können dies sehen, indem Sie Folgendes beachten:

     
  • Spalteneindeutigkeit
  •   
  • Spaltenbreite
  •   
  • Datentyp der Spalte
  •   

SELECT * FROM t1 WHERE c2 = 12

     

SELECT * FROM t1 WHERE c2 = 12 AND c1 = 11

     

Ein Index für (c2, c1) kommt beiden Abfragen zugute. Ein Index für (c1, c2) ist jedoch nicht geeignet, da die Daten anfänglich in c1 sortiert werden, während für die erste SELECT -Anweisung die Daten nach c2 sortiert werden müssen.

Quelle: SQL Server 2008 Abfrage-Leistungsoptimierung Destilliert

    
Kermit 06.09.2012 14:17
quelle