PostgreSQL 9.2 set enable_nestloop无效

PostgreSQL 9.2 set enable_nestloop无效,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,我试着改变嵌套循环 set enable_nestloop=1 当我看 show enable_nestloop; enable_nestloop ----------------- on (1 row) 一切都好。但它没有效果。 如果在配置文件中更改此参数,然后从cli重新加载配置,则一切正常。 为什么设置不适用于我?enable\u nestloop是一个测试参数。默认情况下它是打开的,这就是为什么打开它没有效果的原因。它就在那里,因此您可以关闭它,告诉查询计划器“请不要使用嵌套循

我试着改变嵌套循环

set enable_nestloop=1
当我看

show enable_nestloop;
 enable_nestloop 
-----------------
 on
(1 row)
一切都好。但它没有效果。 如果在配置文件中更改此参数,然后从cli重新加载配置,则一切正常。
为什么设置不适用于我?

enable\u nestloop
是一个测试参数。默认情况下它是打开的,这就是为什么打开它没有效果的原因。它就在那里,因此您可以关闭它,告诉查询计划器“请不要使用嵌套循环,除非您没有其他方法来执行此查询”。它通过强制嵌套循环的成本估算非常高来实现这一点

这不是一个查询提示,您可以用它来表示“请为此查询使用嵌套循环”。它不是那样工作的

强烈建议您不要将这些测试参数用于生产用途。现在强行制定计划可能会在以后产生不幸的后果。如果可能,使用成本参数,如
随机页面成本
有效缓存大小
,引导计划员自行选择最合适的计划

如果您绝对必须在应用程序中使用类似的参数,请使用
SET LOCAL
在一个事务中设置它们


无法为单个语句设置它们,然后自动取消设置它们。这部分是因为它们不应该这样使用。它们不是为查询提示而设计的。

你说的“没有效果”是什么意思?查询计划没有改变你确实看到了这样的评论:“不可能完全抑制嵌套循环联接,但是如果有其他方法可用,关闭此变量会阻止计划员使用它”(另外:默认值是
打开
)我的错误,坏榜样。我知道默认情况下它是“开”的。在应用程序中,我需要为一些查询将其设置为“关闭”,然后返回“打开”。也许您知道如何实现它?如果您的查询速度较慢,最好发布查询并获得有关如何改进的帮助: