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 <
[email protected]> 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 <[email protected]>
> *Para:* Comunidade PostgreSQL Brasileira <
> [email protected]>
> *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
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> 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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a