SQL Server
delar upp varje index i upp till 200
intervall med följande data (från här
):
Vanligtvis går de flesta ifyllda värdena in i RANGE_HI_KEY
.
De kan dock komma in i intervallet och detta kan leda till skevhet i distributionen.
Föreställ dig dessa data (bland de andra):
Nyckelvärde Antal rader
1 1
2 1
3 10000
4 1
SQL Server
bygger vanligtvis två intervall:1
till 3
och 4
till nästa ifyllda värde, vilket gör denna statistik:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
3 2 10000 1 2
, vilket betyder när du söker efter, säg, 2
, det finns bara 1
rad och det är bättre att använda indexåtkomsten.
Men om 3
går inom intervallet, är statistiken följande:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
4 10002 1 3334 3
Optimeraren tror att det finns 3334
rader för nyckeln 2
och indexåtkomst är för dyrt.