Olá Pessoal,
 
Estou fazendo uns tens de desempenho aqui com índices.
 
Tenho duas relações de exemplo com muitos dados nelas:
CLIENTE: idCliente, razao, fone
VENDA: idVenda, idCliente, data
 
Muitas vendas se relacionam a um cliente pelo campo idCliente que tem em ambos.
 
Se quero colocar numa grade as vendas com seus respectivos nomes de clientes, normalmente usaríamos um JOIN nas duas tabelas e faríamos uma única pesquisa SQL dessa forma:
 
SELECT v.idVenda, v.data, c.razao
FROM venda v INNER JOIN cliente c ON v.idCliente = c.idCliente
 
Constatei que demora muito (3 segundos) para essa pesquisa ser realizada com uma quantidade relativa de dados. Por isso fiz um outro teste, usando PLPGSQL
 
Essa função busca todas as vendas, num loop FOR, e para cada uma, busca o nome do cliente na relação Cliente.
 
Constatei que essa última forma, usando função, a pesquisa foi mais rápida. Acredito que seja pelo fato de a consulta ser complexa com INNER JOIN, e por isso ele não usa os índices como deveria, já com a função, embora foram 2 pesquisas, por serem pesquisas bem simples e diretas, foi mais rápida.
 
Eu realmente preferiria resolver minhas consultas com JOINs com um único SQL, mas se com função me render maior performance, com certeza farei com funções. Principalmente em bancos grandes.
 
Alguém tem algum comentário sobre isso? Minha constatação realmente é correta?
 
Att.
 
Nelson.
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a