【问题标题】:Can postgres use an index when clause is a modulo当子句为模时,postgres 可以使用索引吗
【发布时间】:2015-11-18 10:45:35
【问题描述】:

我已经四处寻找答案,但我能找到的唯一参考是一个晦涩的论坛帖子,该帖子表明运算符,包括 % (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

【问题讨论】:

  • 如果您使用该表达式创建索引,那么是的,如果 Postgres 可以提高性能,它将使用该索引。但是您需要将表定义 (create table ...) 和查询添加到您的问题中,以便正确回答。见这里:stackoverflow.com/tags/postgresql-performance/info
  • 这是一个非常笼统的问题。我将添加一个示例。
  • 部分索引是可能的,除了我们希望模“并行化”是可配置的......

标签: postgresql indexing enterprisedb


【解决方案1】:

索引可用于不可变的任何列或表达式。换句话说,表达式的结果必须完全取决于底层列的值,无论是直接还是通过使用它们的表达式。因此,模运算符在索引中使用是完全有效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2015-06-29
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多