Thiago,

Este parece ser exatamente o mesmo problema do meu email da semana passada
entitulado "Dúvida Indice".
Dê uma olhada lá. Pelo que entendi das respostas dos amigos da lista, não é
um erro meu e parece ser algum erro no SGBD.
De qualquer forma eu consegui fazer o Post usar o indice utilizando um "ANY
ARRAY" que apesar de não parecer muito elegante, resolveu o problema e
utilizou o índice.

att,

Hugo Sacramento

Em 15 de abril de 2011 10:35, Thiago <[email protected]> escreveu:

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

Responder a