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

Kolumna klucza indeksu VS Kolumna z uwzględnieniem indeksu

Kolumny klucza indeksu są częścią b-drzewa indeksu. Uwzględnione kolumny nie są.

Weź dwa indeksy:

CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)

index1 lepiej nadaje się do tego rodzaju zapytań:

SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z

Natomiast index2 lepiej nadaje się do tego rodzaju zapytań:

SELECT col2, col3 FROM table1 WHERE col1 = x

W pierwszym zapytaniu index1 zapewnia mechanizm szybkiego identyfikowania interesujących wierszy. Zapytanie (prawdopodobnie) zostanie wykonane jako wyszukiwanie indeksu, po którym nastąpi wyszukiwanie zakładek w celu pobrania pełnych wierszy.

W drugim zapytaniu index2 działa jako indeks pokrywający. SQL Server nie musi w ogóle trafiać do tabeli bazowej, ponieważ indeks dostarcza wszystkie dane potrzebne do spełnienia zapytania. index1 może również działać jako indeks pokrycia w tym przypadku.

Jeśli potrzebujesz indeksu pokrywającego, ale nie chcesz dodawać wszystkich kolumn do b-drzewa, ponieważ ich nie szukasz lub nie możesz, ponieważ nie są one dozwolonym typem danych (np. XML), użyj WŁĄCZ klauzulę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdowanie duplikatów w jednej kolumnie za pomocą wybierz gdzie w SQL Server 2008

  2. SQL Server dbo.sysdiagrams to tabela użytkownika lub tabela systemowa

  3. Jaki jest powód użycia kontekstu Transakcji przez inną sesję?

  4. Wyrażenie ścieżki XML zawierające znaki specjalne

  5. Zrozumienie monitorowania wydajności serwera SQL opartego na chmurze