Quer saber como aprimorar suas consultas e conseguir resultados mais velozes? Aqui, discutiremos dicas e técnicas para aprimorar suas consultas SQL.
1. Examine os Planos de Execução das Consultas
Os planos de execução oferecem um panorama de como o banco de dados acessa e busca os dados. Ao observar esses planos, é possível identificar pontos de lentidão, como falta de índices ou junções mal otimizadas. Ferramentas como EXPLAIN ou SQL Server Management Studio são cruciais para entender e otimizar os planos de execução.
2. Especifique os Nomes das Colunas
Ao invés de usar o curinga (*) para selecionar todas as colunas, mencione explicitamente as colunas desejadas. Assim, você puxa apenas os dados que realmente precisa, diminuindo a carga no banco de dados e tornando a consulta mais rápida.
❌ Evite:
SELECT * FROM employee;
✅ Prefira:
SELECT emp_id, first_name, last_name, dept_id, salary FROM employee;
3. Utilize Filtros Apropriados
Se deseja resultados específicos, não se esqueça de aplicar condições e índices corretos. Assim, o banco de dados achará e trará os dados em menor tempo.
❌ Evite:
-- Consultando funcionários de um departamento em específico
SELECT emp_id, first_name .... FROM employee;
-- OU
SELECT * FROM employee;
✅ Prefira:
-- Sempre especifique os filtros, quando houver
SELECT emp_id, first_name, last_name, dept_id, salary FROM employee WHERE dept_id = 10;
4. Restrinja a Quantidade de Resultados
Se só precisa visualizar alguns registros, não desperdice recursos pedindo todos eles. Use cláusulas LIMIT ou TOP para limitar a quantidade retornada.
❌ Evite:
-- Se quiser apenas uma amostra, não peça todos os registros
SELECT emp_id, first_name .... FROM employee;
-- OU
SELECT * FROM employee;
✅ Prefira:
-- Selecionar uma amostra pequena é uma escolha eficiente
SELECT TOP 10 * FROM employee;
-- OU
SELECT * FROM employee LIMIT 10;
5. Implemente Índices
Índices são como índices de livro para o banco de dados: permitem encontrar informações rapidamente. Se souber escolher as colunas certas para indexação, suas consultas se tornarão bem mais ágeis.
6. Faça Junções (JOINS) Eficientes
Combinar tabelas é um procedimento essencial no SQL. Porém, é crucial fazer isso da forma certa para evitar lentidão. Use os tipos corretos de junção e assegure-se que as colunas envolvidas estejam indexadas.
7. Evite o Uso Desnecessário de DISTINCT
DISTINCT é útil para evitar repetições. No entanto, ele consome recursos. Se puder, busque formas de garantir registros únicos sem usar DISTINCT.
❌ Evite:
-- Sem chave primária
SELECT DISTINCT first_name, last_name, salary FROM employee;
✅ Prefira:
-- Com a chave primária, garantimos registros únicos
SELECT emp_id, first_name, last_name, dept_id, salary FROM employee;
8. Prefira Junções a Subconsultas
Substituir subconsultas por junções pode tornar sua consulta mais eficiente.
❌ Evite:
SELECT * FROM products p WHERE p.prod_id = (SELECT s.prod_id FROM sales s WHERE s.cust_id = 100 AND s.quantity_sold = 1);
✅ Prefira:
SELECT p.* FROM products p, sales s WHERE p.prod_id = s.prod_id AND s.cust_id = 100 AND s.quantity_sold = 1;
9. Cuidado com OR em Condições de JOIN
O uso de OR em condições de JOIN pode dobrar o tempo de consulta.
❌ Evite:
SELECT * FROM costs c INNER JOIN products p ON c.unit_price = p.prod_min_price OR c.unit_price = p.prod_list_price;
✅ Prefira:
SELECT * FROM costs c INNER JOIN products p ON c.unit_price = p.prod_min_price
UNION ALL
SELECT * FROM costs c INNER JOIN products p ON c.unit_price = p.prod_list_price;
10. UNION ALL x UNION
UNION ALL é mais veloz que UNION, pois não verifica duplicatas.
❌ Evite:
SELECT customer_id FROM sales
UNION
SELECT customer_id FROM customers;
✅ Prefira:
SELECT customer_id FROM sales
UNION ALL
SELECT customer_id FROM customers;
11. Fuja de Funções do Lado Direito do Operador
A performance melhora significativamente se funções não forem usadas à direita dos operadores.
❌ Evite:
SELECT * FROM sales
WHERE EXTRACT (YEAR FROM TO_DATE (time_id, ‘DD-MON-YYYY’)) = 2021
AND EXTRACT (MONTH FROM TO_DATE (time_id, ‘DD-MON-YYYY’)) = 2002;
✅ Prefira:
SELECT * FROM sales
WHERE TRUNC (time_id) BETWEEN TRUNC(TO_DATE(‘12/01/2001’, ’mm/dd/yyyy’))
AND TRUNC (TO_DATE (‘12/30/2001’,’mm/dd/yyyy’));
Munido dessas dicas e técnicas, você estará mais preparado para otimizar suas consultas SQL e obter resultados com maior eficiência e rapidez. Boas consultas!
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.