Histórico da Página
...
Essa query demorou 1489 ms. Analisando o plano de execução, o SQL Server nos indica a criação de um índice:
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 | ||
---|---|---|
| ||
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:
Ao analisar o alerta, temos o seguinte:
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:
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:
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 | ||
---|---|---|
| ||
DBCC SHOW_STATISTICS (SD3990, D3_DOC) |
Estatística criada:
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:
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.
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.
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.
...