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