这个问题在这里已有答案:
我有一个大约有1000万行的表和一个日期字段的索引 . 当我尝试提取索引字段的唯一值时,即使结果集只有26个项目,Postgres也会运行顺序扫描 . 为什么优化人员会选择这个计划?我能做些什么来避免它呢?
explain select "labelDate" from pages group by "labelDate";
QUERY PLAN
-----------------------------------------------------------------------
HashAggregate (cost=524616.78..524617.04 rows=26 width=4)
Group Key: "labelDate"
-> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4)
(3 rows)
1 回答
我认为你的问题在于查询规划器想要读取整个表,因为你有一个
GROUP BY
子句,即使你没有使用任何聚合函数 . 因此,它看起来类似于"Why is count(*) so slow"的问题,您将在postgresql问题中以多种形式找到它 .在您的情况下,查询有点奇怪 . 这个简单的查询回答了您的问题: