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 и достъпът до индекс е твърде скъп.