Plano de execução de SQL mostra um “Actual número de linhas”, que é maior do que o tamanho da tabela

StackOverflow https://stackoverflow.com/questions/1006385

Pergunta

Eu tenho um plano de execução para uma bastante complexa juntar o que mostra uma pesquisa de índice que está sendo executada em uma tabela com o "número real de linhas" leitura ~ 70.000, quando existem, de facto, apenas ~ 600 linhas na tabela no total ( o número estimado de linhas é de apenas 127).

Note que todas as estatísticas são atualizadas e os parâmetros de entrada para a consulta são exatamente o mesmo que os parâmetros que foram inseridos quando o proc foi compilado.

Porque é que o número real de linhas tão alto, eo que acontece com o número "real Número de linhas" realmente significa?

A minha única teoria é que o alto número de linhas está relacionado com os laços aninhados, e que essa busca de índice está sendo executado um número de vezes - o "número real de linhas" realmente representa o número total de linhas sobre todas as execuções. Se este for o caso, é o número estimado de linhas também concebido para ser o número total de linhas sobre todas as execuções?

Foi útil?

Solução

ActualRows conta o número de vezes GetNext () foi chamado em um operador físico.

Você também deve olhar para os ActualRebinds, ActualRewinds e ActualEndOfScans para ter uma idéia de quantas vezes o loop interno foi re-avaliado:

A rebind significa que um ou mais dos parâmetros correlacionados de junção mudou e o lado interno deve ser reavaliada. Um retrocesso significa que nenhum dos parâmetros correlacionados alteradas e o conjunto de resultados anteriores pode ser interna reutilizados.

Outras dicas

o número real de valores linhas é o resultado de todos os valores processados ??para esse nó no plano de exec. Então, sim, leva em conta os loops aninhados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top