PostgreSQL:指定要使用的索引

PostgreSQL:指定要使用的索引,postgresql,Postgresql,如果我在postgres中的同一列上有两个索引,那么我可以通过什么方式指定在给定查询中使用哪一个索引?主要用于测试,而非生产目的。 换句话说,我需要MySQL替代品来使用索引甚至强制索引。 不,这不是重复,因为这是关于强迫postgres使用索引扫描而不是普通扫描,这不是主题。恐怕postgres中没有这样的东西: 看 多年来,许多人要求PostgreSQL项目 实现“优化器提示”或“查询提示” 在其他RDBMS中,如Oracle和MySQL。官方目前的立场 来自社区的信息如下: 我们对实施该计

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

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

多年来,许多人要求PostgreSQL项目 实现“优化器提示”或“查询提示” 在其他RDBMS中,如Oracle和MySQL。官方目前的立场 来自社区的信息如下:

我们对实施该计划不感兴趣 它们通常在其他计算机上实现的确切方式 数据库。基于“因为他们已经得到了”的提议不会被接受 欢迎。如果你有一个想法,可以避免已经发生的问题 通过其他提示系统观察,这可能会导致有价值的结果 讨论

维基列出了一些暗示的替代方案,但是这些建议都不是你想要的


但是,您可以按照中所述强制执行联接顺序,具体取决于来自_collapse_limit和联接_collapse_limit的值(您可以动态设置/重置它们)。这可能会间接影响使用哪些索引,但同样没有明确的索引选择。

问题:为什么?答:你不需要,Postgres会使用一个索引,如果它看起来可用的话。需要有效的最新统计数据才能让PG确定索引在您的特定查询中是否有用。比尔:据我所知,这是关于强迫postgres使用索引扫描而不是普通扫描,这不是主题。还是我弄错了?乔普:我需要它来对不同索引的性能进行基准测试,由于测试结构的原因,有这样一个语句会更干净。错了。您不需要对性能进行基准测试。您必须首先验证数据模型的正确性,然后可能会担心性能。乔普:我不是在测试我的数据模型!我只需要拥有任何大型数据库,并测试我的索引实现版本与现有版本的对比。谢谢你的回答,Postgres提供了很多其他人没有的功能。我今天的一个问题是,尽管我尽了最大的努力,它还是选择了错误的索引。请尝试下面介绍的方法:您实际上可以强制计划类型设置以下选项之一:。同时查看链接重复问题中的其他答案。很可能是索引、统计数据或查询有问题,强制执行计划可能无法达到您的目的。还要检查索引是否包含所有必要的列,如果它们在那里,优化器应该使用它们。