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
