我有一个表R,想要根据z列选择3个前任或继任者。我在z列上有一个B树索引。
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 >= 某个值的行。Explain 提供了相同的查询解释。
为什么会这样,我可以怎么做来解决这个问题?
编辑: 实际上有两个索引,一个升序,一个降序。 以上两个查询的 Explain 结果显示: "Limit (cost=0.00..31.91 rows=3 width=20)" " -> Index Scan Backward using zreverse on r (cost=0.00..17727815.24 rows=1666667 width=20)" " Filter: (z >= some_value")
explain analyze
而不是仅使用explain
吗? - Clodoaldo Neto