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

W jaki sposób indeks nieklastrowy może wyprowadzać kolumnę, która nie jest uwzględniona w indeksie?

Jeśli sama tabela jest klastrowana , wszystkie indeksy pomocnicze zawierają kopię klucza klastrowania (klucza, który określa fizyczną kolejność wierszy w tabeli klastrowanej).

Powód:wiersze w tabeli klastrowej są fizycznie przechowywane w B-drzewie (nie stercie tabeli), a zatem mogą przenosić się gdy węzły B-drzewa zostaną podzielone lub połączone, więc indeks wtórny nie może zawierać tylko „wskaźnika” wiersza (ponieważ groziłoby to „zawieszeniem” po przesunięciu wiersza).

Często ma to szkodliwy wpływ na wydajność — zapytania za pomocą indeksu dodatkowego mogą wymagać podwójnego wyszukiwania :

  • Najpierw przeszukaj indeks pomocniczy i uzyskaj klucz klastrowania.
  • Po drugie, w oparciu o klucz klastrowania pobrany powyżej, przeszukaj samą tabelę klastrowaną (która jest B-drzewo).

Jeśli jednak potrzebujesz tylko pól klucza klastrowania, potrzebne jest tylko pierwsze wyszukiwanie.

Aka „indeks klastrowy” w MS SQL Server.

Zwykle, ale niekoniecznie, KLUCZ PODSTAWOWY w MS SQL Server.

To niefortunne, że klastrowanie jest domyślnie włączone w MS SQL Server - ludzie często po prostu zostawiają to domyślne, nie biorąc w pełni pod uwagę jego skutków. Gdy klastrowanie nie jest odpowiednie, należy jawnie określić słowo kluczowe NONCLUSTERED, aby je wyłączyć.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać rekordy, które nie istnieją na serwerze SQL?

  2. Wywołaj procedurę składowaną w SQL CTE

  3. Zapytanie o wybór miesiąca i numeru weekendu i święta w tym miesiącu

  4. SNIReadSync wykonujący od 120 do 500 ms dla prostego zapytania. Czego szukam?

  5. Debugowanie nie pokazuje aktualnej wersji procedury składowanej