9 Maneiras para Melhorar Perfomance de Consultas SQL

  1. Certifique-se de especificar o índice correto para a consulta.

  2. Verifique se os tipos de dados usados na consulta são compatíveis com os usados na tabela.

  3. Utilize o operador LIKE ao invés do operador = para evitar que o banco de dados procure linha por linha.

  4. Ao invés de vários operadores OR, utilize o operador BETWEEN para reduzir o número de linhas que o banco de dados precisa varrer.

  5. Utilize a cláusula WHERE corretamente para filtrar os resultados da maneira mais eficiente possível.

  6. Quando possível, utilize subconsultas para reduzir o número de linhas que o banco de dados precisa varrer.

  7. Evite ORDER BY desnecessário para melhorar o desempenho da consulta.

  8. Utilize as funções do banco de dados corretamente para obter os resultados desejados.

  9. Utilize o modo de execução explícito ao invés do modo de execução implícito para melhorar o desempenho da consulta.

Sobre:

Utilize o operador LIKE ao invés do operador = para evitar que o banco de dados procure linha por linha.

Acredito que isso está errado. Em ambos os operadores o banco de dados vai procurar linha por linha. Além disso, é mais rápido verificar a igualdade do que buscar por um padrão em uma string, que é o que operador LIKE faz.

Para comprovar, basta executar as duas queries seguintes no PostgreSQL:


explain 
select item
from tabela
	where item like 'xxx';
        
explain 
select item
from tabela
	where item = 'xxx'; 

O comando pede para o banco explicar o que será feito para buscar o dado, em ambos os casos ele retorna algo como "Seq Scan on ...", isto é, irá fazer uma busca sequencial em todos os items.

OBS: Caso a coluna buscada contenha indíces o resultado é um pouco diferente.

Sobre o comando explain.

Usar LIKE é mais rápido do que usar = em SQL porque o LIKE usa um padrão de correspondência ao invés de um valor exato, o que significa que o SQL não precisa de procurar exatamente o que está sendo procurado. Por exemplo, se você estiver procurando por todas as linhas que contêm a palavra "teste", você pode usar LIKE para procurar por todas as linhas que contêm a palavra "teste", em vez de usar o = para procurar por cada linha com exatamente "teste". Isso significa que o SQL precisa percorrer menos linhas para encontrar o que está procurando, o que o torna mais rápido.
Agora entendi o que quis dizer. Nesse exemplo que você deu, faz sentido sim usar `like`, concordo. Mas esse é um caso, há varios que não faz sentido usar `like`. Ou seja, é mais rápido em certos casos, nao dá pra sempre usar `like`, como sugeriu. É necessário analisar o problema. E sobre percorrer mais ou menos linhas, ambos vão varrer todas as linhas do banco, não há diferença, como mostrei usando o comando `explain`. Isso ocorre porque o banco está procurando todos as linhas que satisfazem o `where`, não somente uma linha, então precisa procurar em todos as linhas do banco. Entende? Obrigado por explicar!
Coloquei um riscado no item para evitar confusão. Obrigado!
Obrigado por considerar a sugestão!

Ótimas dicas!

sempre. sempre, sempre eu disse sempre use WHERE com DELETE dica de ouro. rsr begin tran commit tran no pior dos casos um rollback

Essa primeira dica sobre índices devo dizer por experiência própria que é ótima! Principalmente em bancos extremamente grandes, saber quais colunas corretas para realizar indexação causa uma diferença de performance fora do real, parece um recurso bobo mas é extremamente útil