SQL Server divide cada índice em até 200 intervalos com os seguintes dados (de aqui
):Normalmente, os valores mais preenchidos vão para
RANGE_HI_KEY . No entanto, eles podem entrar no intervalo e isso pode levar à distorção na distribuição.
Imagine esses dados (entre outros):
Valor-chave Contagem de linhas
1 1
2 1
3 10000
4 1
SQL Server geralmente cria dois intervalos:1 para 3 e 4 para o próximo valor preenchido, o que torna estas estatísticas:RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
3 2 10000 1 2
, o que significa ao pesquisar, digamos,
2 , existe apenas 1 linha e é melhor usar o acesso ao índice. Mas se
3 vai dentro do intervalo, as estatísticas são estas:RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
4 10002 1 3334 3
O otimizador acha que existem
3334 linhas para a chave 2 e o acesso ao índice é muito caro.