Estou executando uma consulta que está processando alguns nós de um documento XML. Meu custo estimado de subárvore está na casa dos milhões e parece que tudo vem de uma operação de classificação que o servidor sql está executando em alguns dados extraídos de colunas xml via XPath. A operação de classificação tem um número estimado de linhas em torno de 19 milhões, enquanto a contagem real de linhas é de cerca de 800. A consulta em si é razoavelmente boa (1 a 2 segundos), mas a discrepância me faz pensar sobre o desempenho da consulta e por que isso diferença é tão grande?
sql-server
query-performance
xml
Peter Smith
fonte
fonte
Respostas:
Não há estatísticas geradas nas colunas XML. As estimativas são calculadas com base nas expressões usadas ao consultar o XML.
Usando esta tabela:
E essa consulta XML bastante simples:
Fornecerá uma linha retornada, mas as linhas estimadas retornadas serão 200. Serão 200, independentemente de qual XML ou de quanto XML você inserir na coluna XML dessa linha.
Este é o plano de consulta com a contagem estimada de linhas exibida.
Uma maneira de melhorar, ou pelo menos alterar, as estimativas é fornecer ao otimizador de consulta mais informações sobre o XML. Nesse caso, como sei que
root
realmente é um nó raiz no XML, posso reescrever a consulta dessa maneira.Isso me dará uma estimativa de 5 linhas retornadas.
A reescrita da consulta provavelmente não acelerará a fragmentação do XML, mas se as estimativas forem melhores, é provável que o otimizador de consulta possa tomar decisões mais inteligentes para o restante da consulta.
Não encontrei nenhuma documentação sobre quais são as regras para as estimativas, exceto uma apresentação de Michael Rys, onde ele diz:
fonte