SQL Server
разделя всеки индекс на до 200
диапазони със следните данни (от тук
):
Обикновено повечето попълнени стойности влизат в RANGE_HI_KEY
.
Те обаче могат да попаднат в обхвата и това да доведе до изкривяване в разпространението.
Представете си тези данни (наред с другите):
Ключова стойност Брой редове
1 1
2 1
3 10000
4 1
SQL Server
обикновено изгражда два диапазона:1
до 3
и 4
към следващата попълнена стойност, което прави тези статистики:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
3 2 10000 1 2
, което означава когато търсите, да речем, 2
, има само 1
ред и е по-добре да използвате индексния достъп.
Но ако 3
влиза в диапазона, статистиката е следната:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
4 10002 1 3334 3
Оптимизаторът смята, че има 3334
редове за ключа 2
и достъпът до индекс е твърде скъп.