duvida sobre postgres, joins e left joins  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
janjan
JavaEvangelist
[Avatar]

Membro desde: 25/09/2008 18:44:25
Mensagens: 434
Offline

Olá pessoal,
Seguinte

precisei criar umas rotinas em sql pra rodar elas no braço pra atualizar um volume grande de informações
e axei melhor criar varios updates e ir executando eles na sequencia um do outro e tals..

como padrao fiz um select e no resultado do select faço os updates..
meu select ficou assim mais ou menos



me digam por que a ultima consulta foi instantanea!!!!
tá não vou mentir
3 segundos

mas sendo que todas outras demoravam 15,30,50 segundos

a base esta no postgres 8.04
valeu!!
[Email] [MSN]
jsimon
What is classpath?
[Avatar]

Membro desde: 16/04/2010 08:23:36
Mensagens: 8
Offline

Isso acontece porque a função coalesce não te retornará os registros null, apenas se todos os argumentos que você passou forem null. Assim, como há menos registros para retornar, a consulta se torna mais rápida.

Espero ter ajudado.
janjan
JavaEvangelist
[Avatar]

Membro desde: 25/09/2008 18:44:25
Mensagens: 434
Offline

simples assim? hehe
no momento que faço o coalesce ele já filtra e depois filtra novamente com a condição diferente de vazio?
isso?
[Email] [MSN]
evefuji
GUJ Ranger

Membro desde: 14/12/2007 22:37:17
Mensagens: 753
Offline

faz um explain na consulta e analisa melhor. http://www.postgresql.org/docs/8.1/static/sql-explain.html

Bom, se você não mudou nada nas condições, é porque o coalesce filtrou muitos registros antes do left join, e só depois disso fez o cruzamento. Possivelmente o otimizador de consultas do postgre filtrou registros pelo coalesce antes do left join por haver alguma foreign key indicando o cruzamento. Para melhorar desempenho em inner joins, o melhor é cruzar com chaves primárias.
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team