Se você está lendo este artigo, provavelmente já conhece o SQL. Você sabe como escrever consultas SQL básicas. Há muitas maneiras de executar uma consulta SQL para obter os resultados desejados em seu banco de dados.
No entanto, nem todas as consultas SQL são criadas iguais. A maioria pode ser otimizada para seguir as práticas recomendadas de consulta SQL. Este artigo se concentra em 9 dicas de otimização de consulta SQL. Após a leitura, você conhecerá todos os prós e contras de escrever consultas SQL.
1. Evite o uso de SELECT Asterisco (SELECT *)
Essa é uma das práticas recomendadas de SQL mais importantes. A consulta SELECT * retorna registros de todas as colunas da tabela. Embora útil em alguns casos, essa consulta geralmente produz inúmeras complicações:
- Talvez você não precise recuperar todas as colunas. No entanto, SELECT * retorna todos eles, consumindo largura de banda excessiva para executar uma consulta na rede.
- Os nomes das colunas em uma tabela podem ser alterados ou removidos, e novas colunas podem ser adicionadas. Assim, você pode receber resultados inesperados para a consulta SELECT *. Especificar nomes de coluna é uma ideia melhor.
- SELECT * é mais lento que SELECT Column Names porque o último pode usar índices de coluna para retornar dados.
- A ordem das colunas retornadas por SELECT * não está sob seu controle. No entanto, você define a ordem desejada ao especificar os nomes das colunas.
2. Use a cláusula WHERE e HAVING com precisão
As cláusulas WHERE e HAVING no SQL possuem funcionalidades diferentes. Portanto, devemos usá-los de forma diferente. Os três principais casos de uso de WHERE e HAVING estão abaixo:
- WHERE pode ser usado com consultas CRUD, ou seja, SELECT, INSERT, UPDATE, DELETE. Por outro lado, você pode usar HAVING apenas com a instrução SELECT.
- WHERE filtra os dados antes de qualquer operação de agregação, como GROUP BY. Então ele pode ser usado sem qualquer função de agregação. HAVING deve ser usado após a agregação.
- Podemos usar as funções de agregação, como SUM, MIN, MAX COUNT com a cláusula HAVING. Com a cláusula WHERE, não podemos usar funções de agregação, a menos que esta cláusula faça parte de uma subconsulta contida na cláusula HAVING.
3. Use a consulta INNER JOIN em vez da cláusula WHERE para unir tabelas
A consulta JOIN é provavelmente uma das consultas SQL mais úteis. Ele permite que você SELECIONE dados de várias tabelas. Embora você possa usar a cláusula WHERE para obter dados agregados de duas tabelas, a cláusula WHERE é altamente ineficiente.
A cláusula WHERE retorna CROSS JOIN que é um produto cartesiano de registros em ambas as colunas. Por exemplo, se você tiver 1.000 registros na tabela A e o mesmo número de registros na tabela B, a cláusula WHERE criará um CROSS JOIN com 1.000 x 1.000 =1.000.000 registros.
Se as colunas das tabelas A e B envolvidas na cláusula WHERE tiverem apenas 1.000 valores comuns, a cláusula WHERE retornará 1.000 registros dos 1.000.000 registros iniciais criados pelo produto cartesiano.
A cláusula INNER JOIN retorna apenas 1.000 registros em que as tabelas A e B têm valores comuns nas colunas. Nesse caso, INNER JOIN tem 1.000 vezes menos trabalho do que a cláusula WHERE.
Alguns bancos de dados convertem a cláusula WHERE na consulta JOIN na cláusula INNER JOIN nos bastidores. No entanto, é sempre recomendável usar INNER JOIN explicitamente em vez da cláusula WHERE para seguir as práticas recomendadas de codificação SQL.
4. Use EXISTS, NOT EXISTS em vez de IN e NOT IN em SQL
Sempre use EXIST sobre a cláusula IN se quiser confirmar a existência de um valor em uma tabela específica.
O processo que executa a cláusula EXISTS para assim que encontra o valor necessário na tabela. Por outro lado, a consulta IN varre tudo mesmo depois de encontrar o valor necessário.
Da mesma forma, você deve sempre usar NOT EXISTS em vez de NOT IN ao pesquisar o valor que não existe em uma tabela.
5. Use o operador Equals (=) em vez de LIKE Operador em SQL
Você pode usar os operadores =e LIKE para combinar strings. A principal diferença entre os dois é que o operador LIKE é usado para combinar curingas, como %, para pesquisar strings parciais, enquanto o operador equals “=” procura correspondências exatas.
Se você tiver que escolher entre os dois, prefira sempre o operador de igual (“=”), pois ele faz uso de colunas indexadas. Portanto, é mais rápido que a cláusula LIKE.
6. Use a cláusula LIMIT para reduzir os resultados da pesquisa
Se você precisar retornar dados de várias tabelas ou colunas, use a cláusula LIMIT (também conhecida como cláusula TOP) para reduzir os resultados da consulta. Se houver milhares de colunas, ou se você quiser ver como os dados aparecem apenas em suas tabelas, não é necessário retornar todas as linhas. Em vez disso, limite o número de linhas retornadas pela consulta SELECT com a ajuda da cláusula LIMIT em conjunto com ela.
7. Use aliases de tabela ao consultar várias tabelas
Para evitar confusão e impedir que os bancos de dados analisem os nomes das colunas ao pesquisar a tabela à qual pertencem, sempre use aliases de tabela.
Você já precisa usar nomes/aliases de tabela se tiver os mesmos nomes de coluna em várias tabelas, portanto, isso não aumentará sua carga de trabalho.
8. Evite prefixar procedimentos armazenados com “sp_”
Se você trabalhou com procedimentos armazenados, provavelmente prefixou o nome do procedimento armazenado com “sp_”. Este não é o melhor.
O SQL Server começa procurando por procedimentos armazenados com “sp_” no início de seus nomes no banco de dados mestre antes de prosseguir com a pesquisa em outro lugar.
Portanto, você pode economizar bastante tempo não prefixando os procedimentos armazenados com “sp_”. Então, em vez de tentar localizar o procedimento armazenado no banco de dados mestre, o servidor SQL verificará diretamente o dbo como o proprietário do procedimento armazenado.
9. Adote um bom estilo de escrita de consulta
É essencial seguir as práticas recomendadas para consultas SQL, como boas práticas de estilo ao escrever consultas SQL. Preste atenção às recomendações abaixo para melhorar seu estilo de escrita de consulta:
- Sempre adicione comentários às consultas SQL. Os comentários não apenas ajudarão outros membros da equipe a entender melhor suas dúvidas, mas também lembrarão o que você estava fazendo no passado.
- Use convenções de nomenclatura óbvias. O banco de dados, tabelas, nomes de colunas, tabelas temporárias e outros nomes de variáveis devem ser 100% legíveis e claros.
- Recue suas consultas sempre que possível. As consultas internas devem ser recuadas uma guia à esquerda. Os nomes e tipos de coluna dentro de uma tabela também devem ser recuados. O recuo garante uma aparência mais limpa e melhora a legibilidade das consultas que se reflete nas práticas recomendadas do SQL Server para consultas.
Conclusão
SQL é uma linguagem muito flexível que oferece várias maneiras de realizar as tarefas desejadas em um banco de dados. Para tornar seus aplicativos mais eficientes e produtivos e evitar problemas de banco de dados de longo prazo, aplique as melhores práticas modernas de otimização de consulta SQL para escrever suas consultas. Esses métodos ajudam você a acelerar o ajuste de desempenho em SQL, eliminar rotinas desnecessárias e tornar todo o seu trabalho mais conciso e transparente.
Leia também
22 exemplos de índice SQL bacanas para acelerar suas consultas