当子句是模数时,postgres可以使用索引

时间:2015-11-18 10:45:36

标签: postgresql indexing enterprisedb

我一直在寻找答案,但我能找到的唯一参考是一个不起眼的论坛帖子,暗示运营商,包括%(modulo) “sargable”(即可以使用运营商正在运营的索引)

但是,我们在某些情况下使用模来并行化我们的进程似乎不使用模数所在的索引,即使在主键字段上也是如此。这可能是优化器决定表扫描更便宜,但很难确定避免索引的原因。

有没有人有明确的答案,或分享类似的经历?

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

1 个答案:

答案 0 :(得分:0)

索引可用于 immutable 的任何列或表达式。换句话说,表达式的结果必须直接或通过它们所使用的表达式单独依赖于基础列的值。因此,模运算符完全有效,可用于索引。