0

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);

スキーマに問題がある場合はお知らせください。

4

1 に答える 1