【问题标题】:PostgreSQL: specify an index to use [duplicate]PostgreSQL:指定要使用的索引[重复]
【发布时间】:2014-10-04 10:12:04
【问题描述】:

如果我在 postgres 的同一列上有几个索引,我可以通过什么方式指定在给定查询中使用哪个索引?主要用于测试,而不是生产目的。 换句话说,我需要 MySQL 替代 USE INDEX 甚至 FORCE INDEX。 不,这不是重复,因为那是关于强制 postgres 使用索引扫描而不是普通扫描,这不是主题。

【问题讨论】:

  • 问题:为什么?答:你不需要,如果它看起来可用,Postgres 将使用索引。需要有效的最新统计数据来让 PG 确定索引在您的特定查询中是否有用。
  • Bill:据我了解,这是关于强制 postgres 使用索引扫描而不是普通扫描,这不是主题。还是我弄错了?
  • joop:我需要它来对不同索引的性能进行基准测试,并且由于测试结构的原因,使用这样的语句会更清晰。
  • 错了。您不需要对性能进行基准测试。您必须首先验证数据模型的正确性,然后 可能担心性能。
  • joop:那不是我在测试我的数据模型!我只需要拥有 Any Large Database 并测试我的索引实现版本与现有版本。

标签: postgresql


【解决方案1】:

恐怕Postgres中没有这样的东西:

http://wiki.postgresql.org/wiki/OptimizerHintsDiscussion

多年来,很多人都要求 PostgreSQL 项目 在实施时实施“优化器提示”或“查询提示” 在其他 RDBMS 中,例如 Oracle 和 MySQL。官方当前立场 来自社区是这样的:

我们对实施不感兴趣 以它们通常在其他设备上实施的确切方式提示 数据库。基于“因为他们得到了”的建议不会被 欢迎。如果你有一个可以避免问题的想法 与其他提示系统一起观察,这可能会导致有价值的 讨论。

wiki 列出了提示 here 的一些替代方法,但是这些建议都不是您正在寻找的等价物。

但是,您可以按照14.3. Controlling the Planner with Explicit JOIN Clauses 中的说明强制加入顺序,具体取决于from_collapse_limitjoin_collapse_limit 的值(您可以即时设置/重置它们)。这可以间接影响使用哪些索引,但同样没有明确的索引选择。

【讨论】:

  • 感谢您的回答,Postgres 提供了大量其他人没有的功能。我今天遇到的一个问题是,尽管我尽了最大努力,但还是选择了错误的索引。
  • 尝试这里描述的东西:postgresql.org/docs/12/indexes-examine.html,您实际上可以强制计划类型设置以下选项之一:postgresql.org/docs/12/runtime-config-query.html。另请查看链接的重复问题中的其他答案。您的索引很可能有问题,它的统计信息或查询和强制计划可能无法满足您的要求。还要检查索引是否包含所有必要的列,如果它们在那里,优化器应该使用它们。
猜你喜欢
  • 2019-06-30
  • 2021-12-25
  • 2016-07-28
  • 2021-01-21
  • 2014-08-27
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多