【发布时间】:2020-12-27 20:50:27
【问题描述】:
我有一个非常简单的查询:
select id, max(time) AS max_time
from table
group by id;
我还使用 id + time 创建了一个索引:
CREATE INDEX table_time_and_id ON table USING (id, time DESC NULLS LAST)
(我假设 id 已经有一个索引,因为它是一个外键,时间可以是 NULL)
问题是,如果我explainselect,我看到这个索引没有被使用;我期望对于每个id,它必须只选择第一个元素,因为它已经是max(),并且几乎是立即的;相反,它正在执行顺序读取,大约需要 16 秒。
我试图通过SET LOCAL enable_seqscan = off; 强制使用索引,而在它执行并使用正确的索引时,大约需要 1 分钟!
为什么这个索引变慢了,而不是让查询变得更快?我该如何解决?
数据库是postgreeSQL。
【问题讨论】:
标签: sql postgresql select indexing group-by