SQL Server
dzieli każdy indeks na maksymalnie 200
zakresy z następującymi danymi (z tutaj
):
Zwykle większość wypełnianych wartości trafia do RANGE_HI_KEY
.
Mogą jednak dostać się do zasięgu, a to może prowadzić do przekrzywienia dystrybucji.
Wyobraź sobie te dane (między innymi):
Wartość klucza Liczba wierszy
1 1
2 1
3 10000
4 1
SQL Server
zwykle buduje dwa zakresy:1
do 3
i 4
do następnej wypełnionej wartości, co powoduje, że te statystyki:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
3 2 10000 1 2
, co oznacza podczas wyszukiwania, powiedzmy, 2
, jest tylko 1
wiersz i lepiej użyć dostępu do indeksu.
Ale jeśli 3
wchodzi w zakres, statystyki są następujące:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
4 10002 1 3334 3
Optymalizator uważa, że istnieje 3334
wiersze dla klucza 2
a dostęp do indeksu jest zbyt drogi.