Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Primärschlüsselsortierung

Daten werden physisch durch einen gruppierten Index gespeichert, der normalerweise der Primärschlüssel ist, aber nicht sein muss.

Daten in SQL haben ohne eine ORDER BY-Klausel keine garantierte Reihenfolge. Sie sollten immer eine ORDER BY-Klausel angeben, wenn Sie die Daten in einer bestimmten Reihenfolge benötigen. Wenn die Tabelle bereits so sortiert ist, wird der Optimierer keine zusätzliche Arbeit leisten, also kann es nicht schaden, sie dort zu haben.

Ohne eine ORDER BY-Klausel gibt das RDBMS möglicherweise zwischengespeicherte Seiten zurück, die Ihrer Abfrage entsprechen, während es darauf wartet, dass Datensätze von der Festplatte eingelesen werden. In diesem Fall werden die Daten möglicherweise nicht in der Reihenfolge des Indexes eingehen, auch wenn die Tabelle einen Index enthält. (Beachten Sie, dass dies nur ein Beispiel ist - ich weiß nicht oder glaube nicht einmal, dass ein reales RDBMS dies tun wird, aber es ist ein akzeptables Verhalten für eine SQL-Implementierung.)

BEARBEITEN

Wenn Sie beim Sortieren im Vergleich zum Nicht-Sortieren eine Auswirkung auf die Leistung haben, sortieren Sie wahrscheinlich nach einer Spalte (oder einem Satz von Spalten), die keinen Index (geclustert oder anderweitig) haben. Da es sich um eine Zeitreihe handelt, sortieren Sie möglicherweise nach Zeit, aber der gruppierte Index basiert auf dem primären Bigint. SQL Server weiß nicht, dass beide auf die gleiche Weise zunehmen, also muss er alles umsortieren.

Wenn die Zeitspalte und die Primärschlüsselspalte nach Reihenfolge verwandt sind (eine wird erhöht, wenn und nur wenn die andere steigt oder gleich bleibt), sortieren Sie stattdessen nach dem Primärschlüssel. Wenn sie nicht auf diese Weise in Beziehung stehen, verschieben Sie den gruppierten Index vom Primärschlüssel in die Spalte(n), nach der/denen Sie sortieren.