文件頭是在omdok表:如何加快刪除文檔,而行
create table omdok (dokumnr serial primary key, ...);
文件排在omrid表
CREATE TABLE omrid
(
id serial NOT NULL,
reanr serial NOT NULL,
dokumnr integer NOT NULL,
CONSTRAINT omrid_pkey PRIMARY KEY (id),
CONSTRAINT omrid_dokumnr_fkey FOREIGN KEY (dokumnr)
REFERENCES omdok (dokumnr) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY IMMEDIATE,
....
);
記錄omdok不具有在omrid需求的子行要刪除
我試圖
delete from omdok where dokumnr not in (select dokumnr from omrid)
查詢它目前正在運行15小時,並且仍在運行。 postgres.exe始終使用50%的CPU(這是2個核心CPU)。
explain delete from omdok where dokumnr not in (select dokumnr from omrid)
回報:
"Delete (cost=0.00..21971079433.34 rows=220815 width=6)"
" -> Seq Scan on omdok (cost=0.00..21971079433.34 rows=220815 width=6)"
" Filter: (NOT (SubPlan 1))"
" SubPlan 1"
" -> Materialize (cost=0.00..94756.92 rows=1897261 width=4)"
" -> Seq Scan on omrid (cost=0.00..77858.61 rows=1897261 width=4)"
- 如何刪除家長沒有子行快?
- 此命令是否完成或postgres掛?
- 目前運行15小時。完成需要多少小時? 如何加快此查詢?
使用
PostgreSQL 9.0.1, compiled by Visual C++ build 1500, 64-bit
Windows 2003 x64 server with 4 GB RAM.
psql-genral郵件列表建議用'從omdok刪除不存在的地方(從omrid選擇1,其中omdok.dokumnr = omrid.dokumnr);' – Andrus
@安德魯斯。 。 。我更喜歡「不存在」,但我認爲這個指數適用於任何一種公式。 –