我四处寻找这个问题的答案,但我能找到的唯一引用是一篇模糊的论坛帖子,该帖子建议运算符,包括 % (modulo) 是“可搜索的”(即可以使用运算符(operator)正在操作的索引)
但是,在某些情况下,我们使用模数来并行化我们的流程似乎不使用模数所在的索引,即使在主键字段上也是如此。这可能是优化器决定表扫描无论如何都更便宜,但很难确定回避索引的原因。
有没有人有明确的答案,或者分享类似的经验?
Postgres/EDB v9.3
TIA.
编辑 例如
CREATE TABLE my_table(id bigint, othercolumn varchar(50), PRIMARY KEY(id))
...向表中插入 x 百万条记录...
SELECT othercolumn from my_table where id % 1000 = 0
最佳答案
索引可用于任何不可变 的列或表达式。换句话说,表达式的结果必须完全取决于基础列的值,直接或通过它们在其中使用的表达式。因此,模运算符在索引中使用是完全有效的。
关于postgresql - 当子句是模时,postgres可以使用索引吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33777942/