SSMS
 sql >> Base de Dados >  >> Database Tools >> SSMS

Possíveis etapas para melhorar o desempenho da consulta do SQL Server


Primeiro Run a query do Sql Server Management Studio e observe o plano de consulta para ver onde está o gargalo. Em qualquer lugar que você vê uma "varredura de tabela" ou "varredura de índice", ela precisa passar por todos os dados para encontrar o que está procurando. Se você criar índices apropriados que possam ser usados ​​para essas operações, isso aumentará o desempenho.

Abaixo estão listadas algumas dicas para melhorar o desempenho da consulta sql.

Evite várias junções em uma única consulta

Tente evitar escrever uma consulta SQL usando várias junções que incluem junções externas, aplicação cruzada, aplicação externa e outras subconsultas complexas. Isso reduz as opções do Optimizer para decidir a ordem de junção e o tipo de junção. Às vezes, o Optimizer é forçado a usar junções de loop aninhado, independentemente das consequências de desempenho para consultas com aplicação cruzada ou subconsultas excessivamente complexas.

Elimine os cursores da consulta Tente remover os cursores da consulta e use a consulta baseada em conjunto; consulta baseada em conjunto é mais eficiente do que baseada em cursor. Se houver necessidade de usar o cursor, evite os cursores dinâmicos, pois isso tende a limitar a escolha de planos disponíveis para o otimizador de consultas. Por exemplo, o cursor dinâmico limita o otimizador a usar junções de loop aninhadas.

Evite o uso de subconsulta escalar não correlacionada Você pode reescrever sua consulta para remover a subconsulta escalar não correlacionada como uma consulta separada em vez de parte da consulta principal e armazenar a saída em uma variável, que pode ser referenciada na consulta principal ou parte posterior do lote. Isso dará melhores opções ao Optimizer, o que pode ajudar a retornar estimativas precisas de cardinalidade junto com um plano melhor.

Evite funções com valor de tabela de várias instruções (TVFs) Os TVFs de várias instruções são mais caros do que os TFVs em linha. O SQL Server expande TFVs embutidos na consulta principal da mesma forma que expande exibições, mas avalia TVFs de várias instruções em um contexto separado da consulta principal e materializa os resultados de várias instruções em tabelas de trabalho temporárias. O contexto e a mesa de trabalho separados tornam os TVFs multi-instrução caros.

Crie um índice altamente seletivo A seletividade define a porcentagem de linhas qualificadas na tabela (número qualificado de linhas/número total de linhas). Se a proporção do número qualificado de linhas para o número total de linhas for baixa, o índice é altamente seletivo e é mais útil. Um índice não clusterizado é mais útil se a proporção for em torno de 5% ou menos, o que significa que o índice pode eliminar 95% das linhas da consideração. Se o índice estiver retornando mais de 5% das linhas de uma tabela, provavelmente não será usado; ou um índice diferente será escolhido ou criado ou a tabela será varrida.

Posicionar uma coluna em um índice A ordem ou posição de uma coluna em um índice também desempenha um papel vital para melhorar o desempenho da consulta SQL. Um índice pode ajudar a melhorar o desempenho da consulta SQL se os critérios da consulta corresponderem às colunas mais deixadas na chave de índice. Como prática recomendada, as colunas mais seletivas devem ser colocadas mais à esquerda na chave de um índice não clusterizado.

Eliminar índices não utilizadosA eliminação de índices não utilizados pode ajudar a acelerar as modificações de dados sem afetar a recuperação de dados. Além disso, você precisa definir uma estratégia para processos em lote que são executados com pouca frequência e usam determinados índices. Nesses casos, criar índices antes dos processos em lote e, em seguida, eliminá-los quando os processos em lote forem concluídos, ajuda a reduzir a sobrecarga no banco de dados.

Criação e atualizações de estatísticas Você precisa cuidar da criação de estatísticas e atualizações regulares para colunas computadas e multicolunas referidas na consulta; o otimizador de consulta usa informações sobre a distribuição de valores em uma ou mais colunas de uma tabela de estatísticas para estimar a cardinalidade, ou número de linhas, no resultado da consulta. Essas estimativas de cardinalidade permitem que o otimizador de consulta crie um plano de consulta de alta qualidade.

Revisar suas definições de esquema Por último, mas não menos importante, revise suas definições de esquema; fique de olho se as restrições apropriadas FORIGEN KEY, NOT NULL e CEHCK estão em vigor ou não. A disponibilidade da restrição certa no lugar certo sempre ajuda a melhorar o desempenho da consulta, como a restrição FORIGEN KEY ajuda a simplificar as junções convertendo algumas junções externas ou semi-junções em junções internas e a restrição CHECK também ajuda um pouco removendo predicados desnecessários ou redundantes.

Referência