如何操作 PostgreSQL 优化器的连接顺序?

hal*_*ver 10 postgresql join optimization

我正在研究表连接顺序优化。

在查询处理时,我想获取优化器生成的表连接顺序,并在 PostgreSQL 中使用我自己的算法更新它?

如何在查询处理时更新表连接顺序?

小智 8

你可以做到这一点,但需要一些技巧。

想象一下你得到了这个:

select ... from a, b, c, d, e ...
Run Code Online (Sandbox Code Playgroud)

...这种类型的查询总是会重新排序。

但如果你这样做:

select ... from a JOIN b ... JOIN c JOIN d JOIN c ...
Run Code Online (Sandbox Code Playgroud)

...那么 PostgreSQL 只会对表重新join_collapse_limit排序。您可以将此变量减小到一个较低的值,以强制 PostgreSQL 执行您的命令;但是,我会尽力避免这种情况。

这应该只能在本地使用SET LOCAL,并且您应该首先思考为什么要更改连接顺序。

相关:由于行估计极不准确,全文搜索速度缓慢