Postgres 8.4 を使用しています。私のシステム構成は、ウィンドウ 7 32 ビット 4 GB RAM および 2.5 GHz です。
Postgres に 10 個のテーブルを持つデータベースがありますt1, t2, t3, t4, t5.....t10
。
t1
主キーには、他のすべてのテーブルへの外部キー参照であるシーケンス ID があります。
データはデータベース (つまり、すべてのテーブル) に挿入されますが、t1
他のすべてのテーブルには約 50,000 行のデータがt1
ありますが、主キーが他のすべてのテーブルから参照される 1 つの行があります。次に、2 番目のデータ行を t1 に挿入し、この新しい参照を使用して他のテーブルに再び 50,000 行を挿入します。
問題は、他のテーブルに存在するすべてのデータ エントリを削除する場合です。
delete from t1 where column1='1'
このクエリの実行には約 10 分かかります。
インデックスも作成して試してみましたが、パフォーマンスはまったく向上しません。何ができる?
以下のサンプルスキーマについて言及しました
CREATE TABLE t1
(
c1 numeric(9,0) NOT NULL,
c2 character varying(256) NOT NULL,
c3ver numeric(4,0) NOT NULL,
dmlastupdatedate timestamp with time zone NOT NULL,
CONSTRAINT t1_pkey PRIMARY KEY (c1),
CONSTRAINT t1_c1_c2_key UNIQUE (c2)
);
CREATE TABLE t2
(
c1 character varying(100),
c2 character varying(100),
c3 numeric(9,0) NOT NULL,
c4 numeric(9,0) NOT NULL,
tver numeric(4,0) NOT NULL,
dmlastupdatedate timestamp with time zone NOT NULL,
CONSTRAINT t2_pkey PRIMARY KEY (c3),
CONSTRAINT t2_fk FOREIGN KEY (c4)
REFERENCES t1 (c1) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE,
CONSTRAINT t2_c3_c4_key UNIQUE (c3, c4)
);
CREATE INDEX t2_index ON t2 USING btree (c4);
スキーマに問題がある場合はお知らせください。