Re: Long-running DELETE...WHERE...

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: jboes(at)nexcerpt(dot)com (Jeff Boes)
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: Long-running DELETE...WHERE...
Date: 2002-01-15 01:21:10
Message-ID: 21141.1011057670@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

jboes(at)nexcerpt(dot)com (Jeff Boes) writes:
> My situation: table A has 200,000 rows. I've made up a temporary table
> which holds the single-valued primary key for 80,000 rows which I want
> to delete.
> DELETE FROM a WHERE id IN (select ID from tmp LIMIT 800);
> runs for several minutes.

WHERE ... IN ... is notoriously inefficient. I'd try

DELETE FROM aa WHERE id = tmp.id;

which is not standard SQL but should be able to produce a decent plan.

You might find that a VACUUM ANALYZE on both tables beforehand would be
a good idea, too; never-vacuumed temp tables have some default
statistics assumed that are a lot less than 80k rows.

regards, tom lane

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Chester Carlton Young 2002-01-15 02:04:15 Re: Long-running DELETE...WHERE...
Previous Message Josh Berkus 2002-01-15 01:01:40 Re: nested inner join help