搜索

首页  >  问答  >  正文

如何强制Postgres使用指定的索引?

<p>当Postgres坚持执行顺序扫描时,我如何强制它使用索引?</p>
P粉785905797P粉785905797465 天前669

全部回复(1)我来回复

  • P粉281089485

    P粉2810894852023-08-21 18:52:40

    假设您询问的是许多数据库中常见的“索引提示”功能,PostgreSQL并不提供这样的功能。这是PostgreSQL团队做出的有意决定。关于为什么以及您可以做什么的很好的概述可以在这里找到。基本原因是,这是一种性能优化的方法,在数据发生变化时往往会导致更多的问题,而PostgreSQL的优化器可以根据统计数据重新评估计划。换句话说,今天可能是一个好的查询计划,但可能不会一直是一个好的查询计划,而索引提示则会强制使用特定的查询计划。

    作为一种非常粗糙的工具,用于测试,您可以使用enable_seqscanenable_indexscan参数。请参阅:

    这些不适用于持续的生产使用。如果您在查询计划选择方面遇到问题,您应该查看用于追踪查询性能问题的文档。不要只是设置enable_参数然后离开。

    除非您有非常充分的理由使用索引,否则Postgres可能会做出正确的选择。为什么呢?

    • 对于小表来说,顺序扫描更快。
    • 当数据类型不匹配时,Postgres不使用索引,您可能需要包含适当的转换。
    • 您的计划设置可能会导致问题。

    还请参阅这篇旧的新闻组帖子

    回复
    0
  • 取消回复