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