Search Postgresql Archives

Re: Restore referencial integrity

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 30, 2010 at 05:04:36PM -0300, Carlos Henrique Reimer wrote:
> Hi
> 
> Thank David and Georg for your suggestions.
> 
> Yes, there is an index now defined on column protocolo in table
> posicoes_controles.

Legal!

> I've selected two suggested commands to compare which would be more
> performatic and which will run faster:
> 
> Option 1)
> explain delete from posicoes_controles where protocolo not in (select
> protocolo from posicoes);
> "Seq Scan on posicoes_controles  (cost=9954587.42..1185225908771206.50
> rows=189513428 width=6)"
> "  Filter: (NOT (subplan))"
> "  SubPlan"
> "    ->  Materialize  (cost=9954587.42..15255636.80 rows=381199038 width=4)"
> "          ->  Seq Scan on posicoes  (cost=0.00..8084329.38 rows=381199038
> width=4)"
> 
> Option 2)
> explain delete FROM posicoes_controles WHERE NOT EXISTS (
>    SELECT 1 FROM posicoes WHERE posicoes.protocolo =
> posicoes_controles.protocolo
> );
> "Seq Scan on posicoes_controles  (cost=0.00..9560672015.05 rows=189419047
> width=6)"
> "  Filter: (NOT (subplan))"
> "  SubPlan"
> "    ->  Index Scan using pk_posicoes_protocolo on posicoes
> (cost=0.00..25.19 rows=1 width=0)"
> "          Index Cond: (protocolo = $0)"
> I'm not an explain specialist but I understood the second option will run
> much more faster.

It probably will.  EXISTS returns immediately when it finds the first
row.

> Let me know if I understood the explain for the second option:
> 1) Run a seq scan on posicoes_controles and get the protocolo key to access
> posicoes_protocolo
> 2) For each row accessed in item 1 run an index scan on posicoes to check if
> the key
> is in the table posicoes
> 3) If the parent found is not found on posicoes then remove the row from
> posicoes_controles
> 
> Am I thinking correctly?

I believe so.

Cheers,
David (whose pt_BR is pretty w34k)
-- 
David Fetter <david@xxxxxxxxxx> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fetter@xxxxxxxxx
iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux