如何禁用PostgreSQL的所有优化

如何禁用PostgreSQL的所有优化,postgresql,query-optimization,Postgresql,Query Optimization,我正在研究查询优化,想知道每种优化对查询有多大帮助。上一次,我得到了一个答案,但在我的实验中,禁用链接中的所有优化的时间复杂度为O(n^1.8),启用所有链接的时间复杂度为O(n^0.5)。没有太大的区别,如果禁用所有这些,还有其他优化吗?我怎么能每次只进行一次主要优化呢 你不能 PostgreSQL的查询计划器没有“关闭优化”标志 添加它会很有趣,但会使回归测试变得更加复杂,并且效用非常有限 为了实现您想要的功能,我认为您应该修改查询计划器代码,重新编译,并为每个测试重新安装PostgreSQ

我正在研究查询优化,想知道每种优化对查询有多大帮助。上一次,我得到了一个答案,但在我的实验中,禁用链接中的所有优化的时间复杂度为O(n^1.8),启用所有链接的时间复杂度为O(n^0.5)。没有太大的区别,如果禁用所有这些,还有其他优化吗?我怎么能每次只进行一次主要优化呢

你不能

PostgreSQL的查询计划器没有“关闭优化”标志

添加它会很有趣,但会使回归测试变得更加复杂,并且效用非常有限

为了实现您想要的功能,我认为您应该修改查询计划器代码,重新编译,并为每个测试重新安装PostgreSQL。或者修改它,添加一组自定义GUC(系统变量,如
enable_seqscan
),让您打开和关闭特定的优化

我怀疑任何这样的补丁都不会被PostgreSQL接受,但作为一个一次性的补丁是值得的


唯一的挑战是PostgreSQL没有在“优化”和“我们执行查询所做的事情”之间做出明显区分。有时,planner代码的某些部分期望并要求应用特定的优化以正确工作。

您的问题中隐含的概念是,执行每个查询都有某种“默认”方式,您可以通过不做任何事情回到默认方式。我不认为这是规划者的工作方式。另外,n^0.5和n^1.8之间的差异可能很大。谢谢,我想我必须修改优化器的源代码。然而,这似乎相当复杂。您能推荐一些关于postgresql优化器详细体系结构的文档或书籍吗?我没有找到一个…看看postgresql站点的开发者部分和开发者postgresql wiki条目。那里有一些资源。Pg文件中也有一些内部信息。最好的资源是源代码及其自我注释。是的,很复杂。