Witajcie eksperci silnika SQL Server; proszę podzielić się z nami odrobiną waszego wglądu ...Wydajność serwera SQL: indeks nieklastrowy + kolumny INCLUDE a indeks klastrowany - odpowiednik?
Jak rozumiem, INCLUDE kolumny w indeksie nieklastrowanym pozwalają na przechowywanie dodatkowych, nie-kluczowych danych na stronach indeksu.
Doskonale zdaję sobie sprawę z zalet wydajności, jaką ma indeks klastrowy w porównaniu z indeksem nieklastrowym, po prostu z powodu mniejszej liczby kroków, jakie silnik musi wykonać w celu pobrania danych w celu uzyskania danych na dysku.
Jednak ponieważ kolumny INCLUDE są wyświetlane w indeksie nieklastrowanym, można oczekiwać, że następujące zapytanie będzie miało zasadniczo taką samą wydajność w scenariuszach 1 i 2, ponieważ wszystkie kolumny mogą być pobierane ze stron indeksu w scenariuszu 2, a nie w ogóle korzystając ze stron danych tabeli?
ZAPYTANIE
SELECT A, B, C FROM TBL ORDER BY A
SCENARIUSZ 1
CREATE CLUSTERED INDEX IX1 ON TBL (A, B, C);
SCENARIUSZ 2
CREATED NONCLUSTERED INDEX IX1 ON TBL (A) INCLUDE (B, C);
Co mówi rzeczywisty plan kwerendy podczas przełączania między konfiguracjami indeksu? –
będzie zależeć od ogólnego obciążenia pracą zapytania trafiającego do tej tabeli. –
Co ciekawe, indeks nieklastrowy jest preferowany w planie kwerend, ale możliwość korzystania z podpowiedzi kwerendy, złożoności silnika w podejmowaniu decyzji o optymalnym planie kwerendy opartym na wolumenie danych i kto wie, jakie inne czynniki pozostawiają dla mnie tę trwającą zagadkę. Naprawdę szukam kogoś, kto powie coś do powiedzenia i powie: kolumny INCLUDE to nie wszystko, z czego są z jakiegoś powodu ... – Tahbaza