如何在SELECT查询中使用主键索引

时间:2017-10-06 10:23:54

标签: postgresql postgresql-9.6

我有一个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毫秒。

所以我的问题是如何重新排列我的查询,以便主键索引一直使用?

0 个答案:

没有答案