Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Sortowanie kluczy podstawowych

Dane są fizycznie przechowywane w indeksie klastrowym, który jest zwykle kluczem podstawowym, ale nie musi nim być.

Nie ma gwarancji, że dane w SQL będą miały porządek bez klauzuli ORDER BY. Zawsze powinieneś podać klauzulę ORDER BY, gdy chcesz, aby dane były w określonej kolejności. Jeśli tabela jest już posortowana w ten sposób, optymalizator nie wykona żadnej dodatkowej pracy, więc nie zaszkodzi jej tam mieć.

Bez klauzuli ORDER BY system RDBMS może zwracać strony z pamięci podręcznej pasujące do zapytania podczas oczekiwania na wczytanie rekordów z dysku. W takim przypadku, nawet jeśli w tabeli znajduje się indeks, dane mogą nie zostać wprowadzone w kolejności indeksu. (Zauważ, że to tylko przykład — nie wiem, ani nawet nie sądzę, że zrobi to rzeczywisty RDBMS, ale jest to akceptowalne zachowanie dla implementacji SQL.)

EDYTUJ

Jeśli masz wpływ na wydajność podczas sortowania w porównaniu z brakiem sortowania, prawdopodobnie sortujesz według kolumny (lub zestawu kolumn), która nie ma indeksu (klastrowanego lub innego). Biorąc pod uwagę, że jest to szereg czasowy, możesz sortować według czasu, ale indeks klastrowy znajduje się na podstawowym bigint. SQL Server nie wie, że oba te wzrosty rosną w ten sam sposób, więc musi wszystko wykorzystać.

Jeśli kolumna czasu i kolumna klucza podstawowego są powiązane według kolejności (jedna wzrasta wtedy i tylko wtedy, gdy druga wzrasta lub pozostaje taka sama), zamiast tego sortuj według klucza podstawowego. Jeśli nie są one powiązane w ten sposób, przenieś indeks klastrowy z klucza podstawowego do dowolnej kolumny, według której sortujesz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Msg 8672, poziom 16, stan 1, wiersz 1 Instrukcja MERGE próbowała UPDATE lub DELETE tego samego wiersza więcej niż raz

  2. Podstawy dziennika transakcji SQL Server

  3. Kiedy muszę używać początku/końca bloków i słowa kluczowego Go w programie SQL Server?

  4. Ograniczenie klucza obcego może powodować cykle lub wiele ścieżek kaskadowych?

  5. Jak zmienić nazwę bazy danych w SQL Server za pomocą T-SQL