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

Responder a