Em casos extremos eu recomendo usar o INSERT ao invés do DELETE: http://www.midstorm.org/~telles/2007/11/29/nao-use-delete-use-insert/
Veja o que você acha.... []s Fábio Telles 2009/8/4 paulo matadr <[email protected]>: > Seguinte,para a recomendação do osvaldo > o explain da exatamente igual ao uso do IN. > e para a recomendação do fabricio : > DELETE > FROM cobranca_documento_item > WHERE EXISTS (SELECT 1 FROM conta_geral WHERE conta_geral.cnta_id = > cobranca_documento_item.cnta_id AND conta_geral.cntg_ichistorico = 3); > tenho um custo bem maior, e ainda uma estimativa de numero de linhas > afetadas bem maior. > -- > Seq Scan on cobranca_documento_item (cost=0.00..3953114915.19 > rows=122956952 width=6) > Filter: (subplan) > SubPlan > -> Index Scan using conta_geral_pkey on conta_geral (cost=0.00..16.05 > rows=1 width=0) > Index Cond: (cnta_id = $0) > Filter: (cntg_ichistorico = 3) > > Acho que nao tem pra onde correr. > abs > > > ________________________________ > De: Osvaldo Kussama <[email protected]> > Para: Comunidade PostgreSQL Brasileira <[email protected]> > Enviadas: Terça-feira, 4 de Agosto de 2009 11:47:46 > Assunto: Re: [pgbr-geral] Otimizacao delete > > 2009/8/4 paulo matadr <[email protected]>: >> Olha pessoal, >> Eu to com esse delete na maior tabela do meu banco: >> delete from cobranca_documento_item where cnta_id in (select cnta_id from >> conta_geral where cntg_ichistorico=3) >> que ta sendo muito custoso para nosso ambiente,no analyze >> Hash IN Join (cost=444791.95..11042547.76 rows=1390453 width=6) >> Hash Cond: (cobranca_documento_item.cnta_id = conta_geral.cnta_id) >> -> Seq Scan on cobranca_documento_item (cost=0.00..5242127.64 >> rows=245865664 width=10) >> -> Hash (cost=438290.02..438290.02 rows=373994 width=4) >> -> Bitmap Heap Scan on conta_geral (cost=7278.42..438290.02 >> rows=373994 width=4) >> Recheck Cond: (cntg_ichistorico = 3) >> -> Bitmap Index Scan on xix1_conta_geral >> (cost=0.00..7184.92 >> rows=373994 width=0) >> Index Cond: (cntg_ichistorico = 3) >> >> Estrutura: >> -Fk de cobranca_documento_item pra conta_geral ligando os campos cnta_id >> -Index para cnta_id em cobranca_documento_item(nao usando neste explain) >> -cnta_id em conta_geral é uma pk >> -Index para cntg_ichistorico em conta_geral( xix1_conta_geral) >> >> Existe uma maneira de fazer um delete mais otimizado n qual nao haja >> seqscan >> em cobranca_documento_item ? >> > > > Tente: > DELETE FROM cobranca_documento_item USING conta_geral > WHERE cnta_id = conta_geral.cnta_id AND conta_geral.cntg_ichistorico = 3; > > Osvaldo > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > ________________________________ > Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - > Celebridades - Música - Esportes > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > -- blog: http://www.midstorm.org/~telles/ e-mail / jabber: [email protected] _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
