dados=# explain analyze select * from gcepro02 p2 left join gcepro03 p3 on
p3.emp = 141 and p3.cod = p2.cod where p2.cod = 11957;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------
Nested Loop Left Join (cost=0.00..37554.70 rows=1 width=430) (actual
time=42.010..243.776 rows=1 loops=1)
Join Filter: ("inner".cod = "outer".cod)
-> Index Scan using gcepro02_pkey on gcepro02 p2 (cost=0.00..4.62 rows=1
width=320) (actual time=0.279..0.288 rows=1 loops=1)
Index Cond: (cod = 11957::numeric)
-> Index Scan using gcepro03_pkey on gcepro03 p3 (cost=0.00..37117.84
rows=34579 width=110) (actual time=0.294..199.979 rows=34526 loops=1)
Index Cond: (emp = 141::numeric)
Total runtime: 244.122 ms
dados=# explain analyze select * from gcepro02 p2 left join gcepro03 p3 on
p3.emp = 141 and p3.cod = 11957 where p2.cod = 11957;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------
Nested Loop Left Join (cost=0.00..10.30 rows=1 width=430) (actual
time=0.561..0.567 rows=1 loops=1)
-> Index Scan using gcepro02_pkey on gcepro02 p2 (cost=0.00..4.62 rows=1
width=320) (actual time=0.221..0.223 rows=1 loops=1)
Index Cond: (cod = 11957::numeric)
-> Index Scan using gcepro03_pkey on gcepro03 p3 (cost=0.00..5.66 rows=1
width=110) (actual time=0.293..0.295 rows=1 loops=1)
Index Cond: ((emp = 141::numeric) AND (cod = 11957::numeric))
Total runtime: 0.819 ms
Em Qua 17 Mai 2006 19:32, Joao escreveu:
> eu posso ta errado mais eu acho ja sei o q acontece
> explain analyze select * from TABELA1 T1 left join TABELA2 T2 on T2.EMP =
> 1 and T2.COD = T1.COD where T1.COD = 11957;
>
> A cada linha da primeira tabela ele varre toda a tabela procurando pela
> condicao de join
> ou seja usa um indice scan na primeira e um seq scan na segunda
>
> explain analyze select * from TABELA1 T1 left join TABELA2 T2 on T2.EMP =
> 1
> and T2.COD = 11957 where T1.COD = 11957;
>
> na segunda creio que ele usa o index scan nas duas por isso deve ser mais
> rapido
>
>
> post ai o resultado do explain pra gente ai!
>
>
>
>
> ----- Original Message -----
> From: "marlon david de souza" <[EMAIL PROTECTED]>
> To: <[email protected]>
> Sent: Wednesday, May 17, 2006 1:01 PM
> Subject: [PostgreSQL-Brasil] Consulta Lenta
>
>
> Boa tarde a todos,
>
> Alguém tem idéia por que a consulta
>
> explain analyze select * from TABELA1 T1 left join TABELA2 T2 on T2.EMP =
> 1
> and T2.COD = T1.COD where T1.COD = 11957;
>
> é feito a leitura dos 34.000 registro que eu tenho na tabela TABELA2,
> enquanto que a consulta
>
> explain analyze select * from TABELA1 T1 left join TABELA2 T2 on T2.EMP =
> 1
> and T2.COD = 11957 where T1.COD = 11957;
>
> somente lê um registro (o que é correto)? A única diferença entre as duas
> consultas é o testes T2.COD=T1.COD na primeira e T2.COD=11957 na segunda.
>
> Obs:
> - Estou usando o Postgres 8.0.4
> - Já rodei o ANALYZE nas duas tabelas.
> - As duas tabelas somente possuem o índice primário.
>
> Sem mais,
>
> ----------------------
> Marlon David de Souza
> Desenvolvimento
> Sysmo Informática Ltda
> _______________________________________________
> Grupo de Usuários do PostgreSQL no Brasil
> http://www.postgresql.org.br
>
> _______________________________________________
> Grupo de Usuários do PostgreSQL no Brasil
> http://www.postgresql.org.br
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br