SQL Server
splitst elke index in maximaal 200
bereiken met de volgende gegevens (van hier
):
Meestal gaan de meeste ingevulde waarden naar RANGE_HI_KEY
.
Ze kunnen echter binnen het bereik komen en dit kan leiden tot scheve verdeling.
Stel je deze gegevens voor (onder andere):
Sleutelwaarde Aantal rijen
1 1
2 1
3 10000
4 1
SQL Server
bouwt meestal twee reeksen:1
tot 3
en 4
naar de volgende ingevulde waarde, waardoor deze statistieken:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
3 2 10000 1 2
, wat betekent dat bij het zoeken naar, laten we zeggen, 2
, er is maar 1
rij en het is beter om de indextoegang te gebruiken.
Maar als 3
gaat binnen het bereik, de statistieken zijn deze:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
4 10002 1 3334 3
De optimizer denkt dat er 3334
. zijn rijen voor de sleutel 2
en indextoegang is te duur.