我在Postegres 8.4上大概有3百万行的表上尝试一个简单的UPDATE表SET column1 = 0,但是它将永远完成。它已经运行超过10分钟。现在在我的最后一次尝试。
之前,我试图在该表上运行一个VACUUM和ANALYZE命令,我也试图创建一些索引(尽管我怀疑这将在这种情况下有任何区别),但没有一个似乎有帮助。
任何其他想法?
谢谢,
里卡多
更新:
这是表结构:
CREATE TABLE myTable ( id bigserial NOT NULL,title text,description text,link text,"type" character varying(255),generalFreq real,generalWeight real,author_id bigint,status_id bigint,CONSTRAINT resources_pkey PRIMARY KEY (id),CONSTRAINT author_pkey FOREIGN KEY (author_id) REFERENCES users (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION,CONSTRAINT c_unique_status_id UNIQUE (status_id) );
我试图运行UPDATE myTable SET generalFreq = 0;
看看这个话题:
PostgreSQL slow on a large table with arrays and lots of updates
首先从更好的FILLFACTOR开始,做一个VACUUM FULL强制表重写,并检查HOT更新在您的UPDATE查询后:
SELECT n_tup_hot_upd,* FROM pg_stat_user_tables WHERE relname = 'myTable';
当你有很多记录更新时,HOT更新速度要快得多。有关HOT的更多信息,请参见本文:
http://pgsql.tapoueh.org/site/html/misc/hot.html
PS。你需要8.3或更好的版本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。