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

SQL Server — kiedy używać indeksu klastrowanego, a kiedy nieklastrowanego?

Chcę tylko dodać słowo ostrzeżenia:proszę bardzo ostrożnie wybierz indeks klastrowy! Każda "zwykła" tabela danych powinna mieć indeks klastrowy, ponieważ posiadanie indeksu klastrowego rzeczywiście przyspiesza wiele operacji - tak, przyśpiesz , nawet wstawia i usuwa! Ale tylko jeśli wybierzesz dobry indeks klastrowy.

Jest to najbardziej replikowany strukturę danych w bazie danych SQL Server. Klucz klastrowania będzie również częścią każdego nieklastrowanego indeksu w Twojej tabeli.

Należy zachować szczególną ostrożność podczas wybierania klucza klastrowania — powinien on wyglądać następująco:

  • wąski (idealnie 4 bajty)

  • unikalny (w końcu jest to „wskaźnik wiersza”. Jeśli nie uczynisz go unikalnym, SQL Server zrobi to za Ciebie w tle, co kosztuje kilka bajtów za każdy wpis razy liczbę wierszy i liczbę nieklastrowanych indeksów, które mieć - może to być bardzo kosztowne!)

  • statyczny (nigdy nie zmieniaj - jeśli to możliwe)

  • idealnie stale rosnący więc nie skończysz z okropną fragmentacją indeksu (identyfikator GUID jest całkowitym przeciwieństwem dobrego klucza klastrowania - z tego konkretnego powodu)

  • nie powinna dopuszczać wartości null, a najlepiej również o stałej szerokości - varchar(250) tworzy bardzo słaby klucz klastrowania

Wszystko inne powinno być drugim i trzecim poziomem ważności za tymi punktami ....

Zobacz niektóre z publikacji Kimberly Tripp (Królowa indeksowania ) posty na blogu na ten temat – wszystko, co napisała na swoim blogu, jest absolutnie bezcenne – przeczytaj to, przetrawij – żyj zgodnie z tym!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Brak wsparcia dla OVER w MS SQL Server 2005?

  2. Wyzwalanie wstawia stare wartości - wartości, które zostały zaktualizowane

  3. Po zakleszczeniu jednej transakcji w różnych wersjach programu SQL Server

  4. Umożliwienie użytkownikowi przekazywania nazwy tabeli i nazwy kolumny przy jednoczesnym zapobieganiu wstrzykiwaniu SQL

  5. Porównaj plany wykonania w SQL Server