Os desenvolvedores não prestam tanta atenção quanto deveriam ao ajuste de consulta SQL ao reduzir os tempos de resposta para aplicativos web. Aqui estão algumas dicas de como aumentar o desempenho de consultas SQL.
Quando vejo otimizações de desempenho para reduzir os tempos de resposta para aplicativos Web, as alterações geralmente são feitas na camada do aplicativo ou verificando a existência do índice nas colunas da tabela do banco de dados.
Mesmo arquitetos e desenvolvedores especialistas tendem a esquecer que entender como os bancos de dados funcionam internamente e escrever consultas SQL melhores é muito importante para obter um melhor desempenho.
Prefixe sempre os nomes dos objetos (por exemplo, nome da tabela, nome do procedimento armazenado, etc.) com seu nome de proprietário.
Pois se o nome do proprietário não for fornecido, o mecanismo do SQL Server tentará localizá-lo em todos os esquemas até que o objeto o encontre. Assim, o mecanismo do SQL Server não pesquisará a tabela fora de seu proprietário se o nome do proprietário for fornecido.
Não use o *
operador em suas SELECT
declarações. Em vez disso, use nomes de colunas.
Já que o SQL Server verifica todos os nomes de coluna e substitui o *
com todos os nomes de coluna da (s) tabela (s) na SELECT
instrução SQL. Assim, fornecer nomes de coluna evita essa pesquisa e substituição e melhora o desempenho.
Não use NOT IN
ao comparar com colunas NULL. Use NOT EXISTS
em vez disso.
Pois quando NOT IN
é usado na consulta (mesmo se a consulta não retornar linhas com valores nulos), o SQL Server verificará cada resultado para ver se é nulo ou não. Portanto, usando NOT EXISTS
não fará a comparação com nulos.
Não use variáveis de tabela em joins. Use tabelas temporárias, CTEs (Common Table Expressions) ou tabelas derivadas em junções.
Motivo: Embora as variáveis de tabela sejam muito rápidas e eficientes em muitas situações, o mecanismo do SQL Server a vê como uma única linha.
Sendo assim, eles executam mal quando usados em junções. CTEs e tabelas derivadas tem melhor desempenho com junções em comparação com variáveis de tabela.
Não comece o nome das suas procedures com sp_
.
Já que, quando a procedure é nomeado sp_
ou SP_
, o SQL Server sempre verifica no banco de dados do sistema/mestre, mesmo se o nome do proprietário/esquema é fornecido.
Fornecer um nome sem SP_
a um procedimento armazenado evita essa verificação desnecessária no banco de dados do sistema/mestre no SQL Server.
Use SET NOCOUNT ON
com operações DML.
Motivo: Ao executar operações DML (ou seja INSERT
, DELETE
, SELECT
, e UPDATE
), SQL Server sempre retorna o número de linhas afetadas.
Em consultas complexas com muitas associações, isso se torna um grande problema de desempenho. Usar SET NOCOUNT ON
irá melhorar o desempenho porque não contará o número de linhas afetadas.
Evite usar GROUP BY
, ORDER BY
e DISTINCT
tanto quanto possível.
Pois ao usar GROUP BY
, ORDER BY
ou DISTINCT
, o mecanismo do SQL Server cria uma tabela de trabalho e coloca os dados na tabela de trabalho.
Sendo assim, ele organiza esses dados na tabela de trabalho, conforme solicitado pela consulta, e retorna o resultado final.
Use GROUP BY
, ORDER BY
ou DISTINCT
na sua consulta somente quando for absolutamente necessário.
Aplicativos complexos e grandes geralmente criam requisitos complexos. Isso nos leva a escrever consultas SQL complexas. Essas simples alterações nas consultas do SQL Server farão uma enorme diferença nos tempos de resposta.
Por fim, obrigado por ler o meu artigo. Espero que tenha sido útil!