|
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
