好了,我有以下表(從pgAdmin的信息):在PostgreSQL中比較小的表非常緩慢更新
CREATE TABLE comments_lemms
(
comment_id integer,
freq integer,
lemm_id integer,
bm25 real
)
WITH (
OIDS=FALSE
);
ALTER TABLE comments_lemms OWNER TO postgres;
-- Index: comments_lemms_comment_id_idx
-- DROP INDEX comments_lemms_comment_id_idx;
CREATE INDEX comments_lemms_comment_id_idx
ON comments_lemms
USING btree
(comment_id);
-- Index: comments_lemms_lemm_id_idx
-- DROP INDEX comments_lemms_lemm_id_idx;
CREATE INDEX comments_lemms_lemm_id_idx
ON comments_lemms
USING btree
(lemm_id);
還有一表:
CREATE TABLE comments
(
id serial NOT NULL,
nid integer,
userid integer,
timest timestamp without time zone,
lemm_length integer,
CONSTRAINT comments_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE comments OWNER TO postgres;
-- Index: comments_id_idx
-- DROP INDEX comments_id_idx;
CREATE INDEX comments_id_idx
ON comments
USING btree
(id);
-- Index: comments_nid_idx
-- DROP INDEX comments_nid_idx;
CREATE INDEX comments_nid_idx
ON comments
USING btree
(nid);
在comments_lemms有800萬條目,評論 - 270萬。 林執行下面的SQL查詢:
update comments_lemms set bm25=(select lemm_length from comments where id=comment_id limit 1)
而且它需要超過20分鐘的運行,而我停下來,因爲pgAdmin的看起來像它即將崩潰。 有沒有什麼辦法可以修改這個查詢或索引或我的數據庫中的任何東西來加速一些事情?我必須在將來運行一些類似的查詢,並且等待超過30分鐘是相當痛苦的。
當你說「看起來像它即將崩潰?」是什麼意思?你有沒有理由不加入? Postgres不允許更新連接? – MJB 2011-05-26 11:07:59
Windows開始尖叫,pgAdmin可能停止工作。因爲我不知道更新連接,所以在sql中我是一個新手,你會看到:)我使用更新連接重寫了我的查詢,再次啓動它,現在正在等待結果顯示。 – Anton 2011-05-26 11:40:18
與問題無關,但我相信'comments_id_idx'沒有必要。 Postgres在沒有被告知的情況下爲PK提供了一個獨特的索引。 – 2011-05-29 00:24:20