索引扫描向后与索引扫描

时间:2011-02-16 13:57:21

标签: postgresql query-optimization

在对I / O等待非常高的服务器进行故障排除时,我注意到来自SELECT max(x) FROM t WHERE y = ?的查询有很多I / O.

我的索引是btree (x, y)

我注意到查询计划执行 Index Scan Backward 以获得最大值。那不好吗?我应该担心这个并且可能添加另一个索引(反向)吗?或者有更好的方法来创建适合此类查询的索引吗?

2 个答案:

答案 0 :(得分:16)

不,不错,从第一个索引页开始需要相同的时间,因为它需要从最后一个索引页开始。使用DESC创建降序索引时,您可以看到“差异”。

此查询的索引(y,x)可能会更好。

答案 1 :(得分:3)

索引已排序,首先是最低值。要查找最大值,后向索引扫描将首先找到最大值:)。

我假设SELECT min(x)会导致正常的索引扫描,是吗?