Marcelo, a diferença de custos entre as duas opções não é tão significativa. 

Os planos de execução mostram que você está fazendo sequential scans. Neste 
caso, aconselho que tente indexar as colunas utilizadas nas junções e teste se 
há melhoria na sua consulta e depois disso peço que repita o teste do explain.

Cordialmente,


Cláudio Leopoldino
postgresqlbr.blogspot.com/
=================================================


________________________________
 De: Marcelo da Silva <marc...@ig.com.br>
Para: Claudio Bezerra Leopoldino <claudiob...@yahoo.com.br>; Comunidade 
PostgreSQL Brasileira <pgbr-geral@listas.postgresql.org.br> 
Enviadas: Sexta-feira, 5 de Julho de 2013 14:54
Assunto: Re: [pgbr-geral] Duvida básica LEFT JOIN x NOT IN
 


Tempo os seguintes resultados:

OPCAO A


explain select a.* from mv_servicos_balcao a
left join mv_servicos_print b on(cod_key_balcao = a.cod_key)
where (b.cod_key is null)
  and(a.obs not in('C'));

"Hash Right Join  (cost=9510.11..17269.55 rows=1 width=136)"
"  Hash Cond: (b.cod_key_balcao = a.cod_key)"
"  Filter: (b.cod_key IS NULL)"
"  ->  Seq Scan on mv_servicos_print b  (cost=0.00..3746.55 rows=213355 
width=8)"
"  ->  Hash  (cost=7913.20..7913.20 rows=127753 width=136)"
"        ->  Seq Scan on mv_servicos_balcao a  (cost=0.00..7913.20 rows=127753 
width=136)"
"              Filter: (obs <> 'C'::bpchar)"


OPCAO B

explain select a.* from mv_servicos_balcao a
where (a.obs not in('C'))
  and(a.cod_key not in(select cod_key_balcao from mv_servicos_print))

"Seq Scan on mv_servicos_balcao a  (cost=4279.94..12516.98 rows=63876 
width=136)"
"  Filter: ((obs <> 'C'::bpchar) AND (NOT (hashed SubPlan 1)))"
"  SubPlan 1"
"    ->  Seq Scan on mv_servicos_print  (cost=0.00..3746.55 rows=213355 
width=4)"


Vou ser sincero... não sei fazer a leitura do explain, mas pelo que vi a 
segunda opção se mostrou mais eficiente, haja visto que sem o explain temos os 
seguintes valores em ms(milisegundos)

OPCAO A = 571 rows e 496ms
OPCAO B = 571 rows e 300ms

Mito detonado ? rsrsrs




Em 5 de julho de 2013 14:31, Claudio Bezerra Leopoldino 
<claudiob...@yahoo.com.br> escreveu:

Não depende apenas da consulta. Depende dos dados armazenados e estatísticas no 
seu servidor.
>
>Peço que use explain e noso envie o reultado:
>
>
>EXPLAIN SELECT A.CAMPOS FROM TABELA_A A
>LEFT JOIN TABELA_B B ON(B.CODIGO = A.CODIGO)
>WHERE (B.CAMPO IS NULL)
>
>
>e
>
>
>EXPLAIN  SELECT A.CAMPOS FROM TABEL_A A
>
>
>WHERE (A.CODIGO NOT IN(SELECT CODIGO FROM TABELA_B))
>
>
>Cordialmente,
>
>
>Cláudio Leopoldino
>postgresqlbr.blogspot.com/
>=================================================
>
>
>________________________________
> De: Marcelo da Silva <marc...@ig.com.br>
>Para: Comunidade PostgreSQL Brasileira <pgbr-geral@listas.postgresql.org.br> 
>Enviadas: Sexta-feira, 5 de Julho de 2013 14:25
>Assunto: [pgbr-geral] Duvida básica LEFT JOIN x NOT IN
> 
>
>
>Qual seria o mais eficiente ?
>
>
>SELECT A.CAMPOS FROM TABELA_A A
>LEFT JOIN TABELA_B B ON(B.CODIGO = A.CODIGO)
>WHERE (B.CAMPO IS NULL)
>
>
>ou
>
>
>SELECT A.CAMPOS FROM TABEL_A A
>
>WHERE (A.CODIGO NOT IN(SELECT CODIGO FROM TABELA_B))
>
>
>
>-- 
>
>Marcelo Silva
>----------------------------------------------------------------
>Desenvolvedor Delphi / PHP
>My Postgres database
>Cel.: (11) 99693-4251
>
>_______________________________________________
>pgbr-geral mailing list
>pgbr-geral@listas.postgresql.org.br
>https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
>_______________________________________________
>pgbr-geral mailing list
>pgbr-geral@listas.postgresql.org.br
>https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 

Marcelo Silva
----------------------------------------------------------------
Desenvolvedor Delphi / PHP
My Postgres database
Cel.: (11) 99693-4251
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a