【问题标题】:Tuning a comparison of two columns against a set of integers调整两列与一组整数的比较
【发布时间】:2012-06-03 18:53:45
【问题描述】:

有这个WHERE 子句:

WHERE detail.element_id IN (4, 5, 6, 7, 8) AND
      (
        detail.additionalelement_id IS NULL OR
        detail.additionalelement_id IN (4, 5, 6, 7, 8)
      )

我们可以创建什么样的索引/对象来优化查询的性能?
您将如何以更有效的方式重写此子句?

【问题讨论】:

    标签: postgresql indexing database-performance performance


    【解决方案1】:

    并在detail(element_id)detail(additionalelement_id) 上创建一个索引,让 postgres 决定使用哪个。

    (使用coalesce(detail.additionalelement_id, -1) 编辑删除)

    【讨论】:

    • 这里的合并“技巧”将阻止优化器使用附加元素id的索引。原始问题的示例 WHERE 子句更适合使用索引。
    • 是的,我又测试了一遍。索引起作用了,而不是合并。谢谢波西米亚和马修
    • @MatthewWood 哎呀!天色已晚。看起来不错。但你是对的。我已经编辑了答案
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多