我有一张桌子:
CREATE TABLE my_table
(
id bigint NOT NULL,
data1 character varying(255),
data2 character varying(100000),
double1 double precision,
double2 double precision,
id2 bigint
);
索引为id2
(id2
为外键)。
我有一个问题:
update my_table set double2 = :param where id2 = :id2;
此查询使用id2
上的索引,但它的工作速度非常慢。
我希望我的查询将使用HOT更新,但事实并非如此。
我通过查询检查了HOT更新:
SELECT pg_stat_get_xact_tuples_hot_updated('my_table'::regclass::oid);
并且它总是返回零。
我做错了什么?我怎样才能加快我的更新查询?
postgres的版本是9.4.11。
UPD: 更新执行计划:
Update on my_table (cost=0.56..97681.01 rows=34633 width=90) (actual time=42082.915..42082.915 rows=0 loops=1)
-> Index Scan using my_index on my_table (cost=0.56..97681.01 rows=34633 width=90) (actual time=0.110..330.563 rows=97128 loops=1)
Output: id, data1, data2, 0.5::double precision, double1, id2, ctid
Index Cond: (my_table.id2 = 379262689897216::bigint)
Planning time: 1.246 ms
Execution time: 42082.986 ms