首页 文章

Postgres是执行顺序扫描而不是索引扫描[重复]

提问于
浏览
2

这个问题在这里已有答案:

我有一个大约有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 回答

  • 1

    我认为你的问题在于查询规划器想要读取整个表,因为你有一个 GROUP BY 子句,即使你没有使用任何聚合函数 . 因此,它看起来类似于"Why is count(*) so slow"的问题,您将在postgresql问题中以多种形式找到它 .

    在您的情况下,查询有点奇怪 . 这个简单的查询回答了您的问题:

    SELECT DISTINCT "labelDate" FROM pages;
    

相关问题