我有一个表 R,想要根据 z 列从中选择 3 个前任或后继者。我在 z 列上有一个 btree 索引。
SELECT key, z, x, y FROM R
WHERE z <= some_value
ORDER BY z DESC
LIMIT 3
Run Code Online (Sandbox Code Playgroud)
立即检索前辈,但
SELECT key, z, x, y FROM R
WHERE z >= some_value
ORDER BY z ASC
LIMIT 3
Run Code Online (Sandbox Code Playgroud)
对于检索下一个条目是无用的,因为它开始扫描所有具有 z >= some_value 的行。Explain 就如何满足查询给出了相同的解释。为什么会这样,我该怎么办?
编辑:实际上有两个索引,一个是升序,一个是降序。对上述两个查询的解释说:“限制(成本=0.00..31.91 行=3 宽度=20)”“-> 使用 zreverse 向后索引扫描(成本=0.00..17727815.24 行=1666667 宽度=20)”“过滤器:(z >= some_value")
z 上的索引是一个“普通”btree 索引,没有指定任何其他内容吗?或者它是按“降序”顺序创建的,即
create index <name> on R(z) desc;
Run Code Online (Sandbox Code Playgroud)
?
很可能将相反顺序的索引添加到您拥有的索引中可能会有所帮助。
| 归档时间: |
|
| 查看次数: |
13693 次 |
| 最近记录: |