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
