Czy „reguła przedrostka z lewej strony” indeksu dotyczy programu SQL Server?

Aug 24 2020

W MySQL skrajny lewy prefiks ma zastosowanie w przypadku indeksu wielokolumnowego, o którym mowa w

  • https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html
  • https://dev.mysql.com/doc/refman/8.0/en/multiple-column-indexes.html

Powiedz, że indeks składa się z (col1, col2, col3). Kombinacje kwalifikujące się do przeszukiwania indeksu:

  • (kol1)
  • (kol1, kol2)
  • (kol1, kol2, kol3)

Kombinacje niekwalifikujące się do przeszukiwania indeksu:

  • (kol2)
  • (kol2, kol3)
  • (kol3)

Czy SQL Server używa tej samej reguły dla mechanizmów przeszukiwania indeksu? Czy istnieje oficjalny dokument, do którego mogę się odwołać? Próbowałem go przeszukać, ale bez powodzenia :( Z góry dziękuję wszystkim!

Odpowiedzi

2 VenkataramanR Aug 24 2020 at 11:23

SQL Server również stosuje podobne podejście do indeksów złożonych, w których tylko kolumny od lewej są brane pod uwagę przy wyszukiwaniu indeksów. Poniżej znajduje się oficjalna dokumentacja tego samego:

Indeks na (a, b, c) będzie przydatny przy zapytaniach wyszukiwawczych poniżej

  • za
  • a, b
  • ABC

Przeczytaj więcej na temat praktyk projektowania indeksu w witrynie MSDN

Rozważ kolejność kolumn, jeśli indeks będzie zawierał wiele kolumn. Kolumna, która jest używana w klauzuli WHERE w warunku wyszukiwania równym (=), większym niż (>), mniejszym niż (<) lub BETWEEN lub uczestniczy w łączeniu, powinna zostać umieszczona jako pierwsza. Dodatkowe kolumny należy uporządkować na podstawie ich poziomu odrębności, tj. Od najbardziej do najmniej odrębnych.

Na przykład, jeśli indeks jest zdefiniowany jako LastName, FirstName, indeks będzie przydatny, gdy kryterium wyszukiwania to WHERE LastName = 'Smith' lub WHERE LastName = Smith AND FirstName LIKE 'J%'. Jednak optymalizator zapytań nie użyje indeksu dla zapytania, które szukało tylko na imię (WHERE FirstName = 'Jane')

6 GordonLinoff Aug 24 2020 at 08:13

Ta reguła jest w zasadzie regułą skanowania indeksów b-drzew.

To powiedziawszy, istnieje alternatywna metoda skanowania, którą Oracle nazywa „skanowaniem pomijanym”. Umożliwia to skanowanie indeksu na klawiszach, które nie znajdują się najbardziej na lewo w indeksie. Niektóre bazy danych to implementują w mniejszym lub większym stopniu. Oto dobre wprowadzenie do tematu. Nie wierzę, że SQL Server implementuje skanowanie z pominięciem.

Chociaż skanowanie z pominięciem jest potężne, ich użyteczność zależy od liczności pierwszego klucza w indeksie. Jeśli pierwszy klucz ma wysoką kardynalność, to nie są one zbyt skuteczne.