我有一个topic_data表, id 作为主键,还有topic_id和时间戳的topic_id_timestamp_index索引,其中topic_id按升序排列,时间戳按降序排列。
当我创建第二个索引时,我根据该索引运行 CLUSTER 命令。
当我运行以下查询时,正在使用 topic_id_timestamp_index 索引。
SELECT id, topic_id, "timestamp", col4, col5, ... , col20
FROM topic_data
where id in ('idval_1',
'idval_2',
'idval_3',
'idval_4',
'idval_5',
'idval_6',
'idval_7',
'idval_8',
'idval_9')
and topic_id in (topic_id_1,
topic_id_2)
and "timestamp" between '2017-01-01' and '2017-10-1' ;
如果我按时间戳升序选择订单,则使用主键索引。我想这种情况正在发生,因为当我运行CLUSTER命令时,数据被重新组织并且时间戳按降序排列,而postgress决定应该使用主索引。
当我运行查询并使用主索引时,查询执行时间为20毫秒。当使用topic_id_timestamp_index时,exec时间为250毫秒。
所以我的问题是如何重新排列我的查询,以便主键索引一直使用?