我正在研究查询优化,想知道每种优化对查询有多大帮助。上次,我得到了一个answer,但是在我的实验中,禁用链接中的所有优化时间为O(n ^ 1.8),并且所有的优先级都为O(n ^ 0.5)。没有那么多差异,如果禁用所有这些,还有其他优化吗?我怎么才能每次只有一个主要的优化?
答案 0 :(得分:2)
你不能。
PostgreSQL的查询规划器没有“关闭优化”标志。
添加它会很有趣,但会使回归测试变得更加复杂,而且效用非常有限。
为了做你想做的事,我想你想要为每个测试修改查询计划代码,重新编译和重新安装PostgreSQL。或者破解它添加一堆自定义GUC(系统变量,如enable_seqscan
),让你打开和关闭特定的优化。
我怀疑任何这样的补丁都会被PostgreSQL接受,但它值得做一次性的。
唯一的挑战是PostgreSQL没有强烈区分“优化”和“我们执行查询的事情”。有时计划程序代码期望和需要的部分内容已应用特定优化以便正常工作。