Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Essa query demorou 1489 ms. Analisando o plano de execução, o SQL Server nos indica a criação de um índice:

Image RemovedImage Added

Porém, a criação do índice não irá resolver a situação. Esta criação até pode melhorar a situação da query naquele momento, mas criar um índice é indicado somente em último caso, se a query for utilizada de forma recorrente e não houver outra a possibilidade de melhorá-lausar um índice já existente na tabela.

Nota
titleAtenção: Criação de índices

Criar muitos índices no banco de dados pode gerar lentidão nas rotinas de Insert, Update e Delete.

No exemplo acima, o próprio SQL Server dá um alerta no Clustered Index Scan:

Image RemovedImage Added

Ao analisar o alerta, temos o seguinte:

Image Modified

Neste Warning, o SQL Server indica a falta de estatística no campo D3_DOC. 

Habilitamos o parâmetro Auto Create Statistics na base de dados analisada. Este parâmetro pode ser habilitado nas propriedades do banco de dados, na aba Options. O alteramos de FALSE para TRUE:

Image RemovedImage Added

Ou por linha de comando:

...

Após alterar o parâmetro, executamos novamente a query. É possível ver a alteração no plano de execução do SQL Server: agora, ele começa a utilizar índices já existentes no banco de dados, sem solicitar a criação de um novo índice:

Image RemovedImage Added

Ao comparar o tempo da de execução após habilitar este parâmetro, verificamos a redução do tempo de 1489 ms para 274 ms, uma redução de aproximadamente 81,6% no tempo da execução.

...

Com o seguinte DBCC, é possível verificar a criação de uma nova estatística logo após executarmos a query de exemplo. Ela foi criada pelo SQL Server automaticamente, e demorou alguns milissegundos para ser criada.

Bloco de código
languagesql
DBCC SHOW_STATISTICS (SD3990, D3_DOC)

Estatística criada:

Image RemovedImage Added

Após realizar a limpeza do buffer, a query foi executada novamente com a estatística criada. Temos, então, o Trial 3, onde o novo tempo de execução caiu de 274 ms para 143 ms, com uma redução de aproximadamente 52,2% entre estes testes e pouco mais de 90% em relação ao teste inicial. Lembre-se: estes valores são referentes às condições aqui aplicadas, e podem variar de acordo com seu cenário.

...

Ao rodar novamente a query, o tempo teve um aumento de 143 ms para 1499 ms, ou seja, 1.048,25% em relação à consulta com estatísticas: 

Image RemovedImage Added 

Comprovação dos testes e conclusão

No início deste documento, pontuamos dois fatores que impactam diretamente a criação do plano de execução, que são a cardinalidade e os operadores. 

...

  • Mesmo comportamento do Trial 1. Tempo de 48 segundos.

Image RemovedImage Added

Comprovamos então que, quanto maior a quantidade de dados, maior será o impacto quando não temos as estatísticas habilitadas.

...

  • O SQL Server atualiza a estatística. Tempo de 1,8 segundos.

Image RemovedImage Added

Nestes últimos testes, incluímos o Auto update statistics a partir do Trial 8, e na próxima vez que houver uma alteração, o SQL irá verificar que a estatística está desatualizada e atualizar a mesma. Sendo assim, incluímos apenas 10 registros e a estatística foi atualizada automaticamente conforme esperado. 

...