Fábio, boa tarde.

A tabela tablefoo contem os mesmos 3 registros.
Eu gostaria de utilizar o Explain mas eu não entendo bulufas dele, até 
por isso eu postei o mesmo para ver se alguém consegue me ajudar.

Obrigado pela força!

Em 15/04/2011 10:22, Fábio Gibon - Comex System escreveu:
> Olá Thiago,
>           não "ache que ele usa ou não", use o explain e veja o plano de
> execução, isto vai lhe ajudar a entender o que ele faz...
>
> Ainda, a tabela tabelafoo tem muitos registros? Se sim, pense em utilizar o
> exists (se a tabela tabelafoo tiver um índice pelo codpro).
>
> sds
> Fábio Gibon
> ----- Original Message -----
> From: "Thiago"<[email protected]>
> To:<[email protected]>
> Sent: Friday, April 15, 2011 10:19 AM
> Subject: [pgbr-geral] Ajuda com índices
>
>
> Pessoal, bom dia.
>
> Eu confesso que não entendo muito sobre índices no postgre, mas imagino
> qual seja o problema.
>
> Tenho uma tabela de movimentação onde o campo código do produto está no
> tipo Real e tenho o seguinte select:
>
> select codigo,sum(qtd)
> from vendas
> where codigo in (1,2,3) and data between '01/01/2010' and '31/12/2010'
> group by codigo
>
> Quando eu rodo o select dessa forma roda super rápido, pois acho que ele
> utiliza os indices, porem quando executo o select utilizando o in em um
> subselect ele é super lento. Acontece que o campo código da outra tabela
> é do tipo Integer. Esse seria o select:
>
> select codigo,sum(qtd)
> from vendas
> where
>      codigo in (
>         select codpro
>         from tabelafoo
>      ) and
>      data between '01/01/2010' and '31/12/2010'
> group by codigo
>
> Esse subselect traz exatamente os mesmos código de quando eu coloco os
> números separados por vírgula.
>
> Eu acho que por serem tipos de campos diferentes ele não está utilizando
> o índice da tabela de vendas.
>
> Eu já tentei dando cast no subselect mas mesmo assim não adiantou.
>
> Alguém saberia me ajudar?
>
> Estou postando junto o Explain dos dois selects:
>
> Rápido:
>
> QUERY PLAN
> Merge Left Join  (cost=549053.15..549059.80 rows=150 width=62)
> "  Merge Cond: (""outer"".balconista = ""inner"".int_cod_balcao)"
>     ->   Sort  (cost=548990.82..548990.90 rows=30 width=20)
>           Sort Key: vnd.balconista
>           ->   Sort  (cost=548989.71..548989.78 rows=30 width=20)
>                 Sort Key: n.movfilcom, n.movcodbal
>                 ->   HashAggregate  (cost=548988.45..548988.97 rows=30
> width=20)
>                       ->   Bitmap Heap Scan on stfil021_new n
> (cost=45001.52..548869.49 rows=11896 width=20)
>                             Recheck Cond: ((movdatmov>=
> '2010-10-01'::date) AND (movdatmov<= '2011-03-30'::date))
>                             Filter: ((movcodite = 44067::double
> precision) OR (movcodite = 25372::double precision) OR (movcodite =
> 173207::double precision) OR (movcodite = 206857::double precision) OR
> (movcodite = 206865::double precision) OR (movcodite = 43621::double
> precision) OR (movcodite = 173193::double precision))
>                             ->   Bitmap Index Scan on stfil021_new_idx1
> (cost=0.00..45001.52 rows=5121753 width=0)
>                                   Index Cond: ((movdatmov>=
> '2010-10-01'::date) AND (movdatmov<= '2011-03-30'::date))
>     ->   Sort  (cost=62.33..64.83 rows=1000 width=46)
>           Sort Key: sp_com_lista_func.int_cod_balcao
>           ->   Function Scan on sp_com_lista_func  (cost=0.00..12.50
> rows=1000 width=46)
>
> Demorado:
>
> QUERY PLAN
> Merge Right Join  (cost=274652.49..274795.49 rows=9200 width=62)
> "  Merge Cond: (""outer"".int_cod_balcao = ""inner"".balconista)"
>     ->   Sort  (cost=62.33..64.83 rows=1000 width=46)
>           Sort Key: sp_com_lista_func.int_cod_balcao
>           ->   Function Scan on sp_com_lista_func  (cost=0.00..12.50
> rows=1000 width=46)
>     ->   Sort  (cost=274590.16..274594.76 rows=1840 width=20)
>           Sort Key: vnd.balconista
>           ->   GroupAggregate  (cost=274416.78..274471.98 rows=1840 width=20)
>                 ->   Sort  (cost=274416.78..274421.38 rows=1840 width=20)
>                       Sort Key: n.movfilcom, n.movcodbal
>                       ->   Nested Loop  (cost=270727.12..274317.00
> rows=1840 width=20)
>                             ->   HashAggregate  (cost=2.20..2.21 rows=1
> width=4)
>                                   ->   Seq Scan on tb_com_camp_det d
> (cost=0.00..2.20 rows=1 width=4)
>                                         Filter: (int_camp_cab = 22)
>                             ->   Bitmap Heap Scan on stfil021_new n
> (cost=270724.92..274287.19 rows=1840 width=24)
> "                                Recheck Cond: ((n.movcodite =
> (""outer"".int_cod_prod)::real) AND (n.movdatmov>= '2010-10-01'::date)
> AND (n.movdatmov<= '2011-03-30'::date))"
>                                   ->   Bitmap Index Scan on
> stfil021_new_idx_fil_ite_dat  (cost=0.00..270724.92 rows=1840 width=0)
> "                                      Index Cond: ((n.movcodite =
> (""outer"".int_cod_prod)::real) AND (n.movdatmov>= '2010-10-01'::date)
> AND (n.movdatmov<= '2011-03-30'::date))"
>
> -----------------------------------------------------------------------
>
> Depois desse livro agradeço quem puder me ajudar.
>
> Abraços!
>
> _______________________________________________
> 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
>


_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a