我有一个表 R 想要根据 z 列从中选择 3 个前任或后继者。我在 z 列上有一个 btree 索引。
SELECT key, z, x, y FROM R
WHERE z <= some_value
ORDER BY z DESC
LIMIT 3
立即检索前辈,但
SELECT key, z, x, y FROM R
WHERE z >= some_value
ORDER BY z ASC
LIMIT 3
对于检索下一个条目是无用的,因为它开始扫描所有具有 z >= some_value 的行。Explain 给出了如何满足查询的相同解释。为什么会这样,我能做些什么呢?
编辑:实际上有两个索引,一个升序和一个降序。解释上面的两个查询:“限制(成本=0.00..31.91 行=3 宽度=20)”“-> 使用 zreverse 在 r 上向后扫描索引(成本=0.00..17727815.24 行=1666667 宽度=20)”“过滤器:(z >= some_value")