Pular para o conteúdo
Início » Como otimizar as consultas SQL

Como otimizar as consultas SQL

SQL -Boas práticas em queries

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!