引起我注意的是,查询子句中的USING
构造(而不是ON
)在某些情况下可能会引入优化障碍。FROM
SELECT
我的意思是这个关键词:
选择 * 从一个 加入b 使用(a_id)
仅在更复杂的情况下。
我用这个了很多,从来没有发现过这么远。我对一个展示效果或进一步信息的链接的测试案例非常感兴趣。我的搜索工作空虚。
USING (a_id)
与替代连接子句相比,完美的答案是显示性能较差的测试用例ON a.a_id = b.a_id
- 如果这确实可能发生。
我发现此线程可能与使我不再使用该线程有关,因为在联接上使用USING条件的VIEW可能导致转储/恢复出现问题:archives.postgresql.org/pgsql- bugs / 2011-06 / msg00030.php 我仍然有na的感觉,还有另一个与使用性能问题相关的线程,其中解决方法是使用ON,但是我想放弃寻找它。在视图之外使用它可能是安全的,并且如果查询很慢,请记住要尝试将其作为诊断步骤进行尝试。
—
kgrittn 2012年
看起来像“使用”使代码更具可读性,但是我想两个字段都需要相同的名称。我不认为使用会比“开”更好的性能,因为数据库无论如何都需要进行匹配,就像选择具有与联接一样的性能(如果我错了,请纠正我),区别在于Join更加干净并且易于维护。
—
jcho360
@HLGEM:这只是一个符号名称,只有两个表,就像在我的示例中一样,没有混淆的空间。不过,我修改了这个问题。不想鼓励不幸使用
—
Erwin Brandstetter,2012年
id
as作为列名。
@ChristiaanWesterbeek:我不同意。深入了解Postgres答案的“前往” 是(仍然)邮寄。只有极少数Postgres开发人员活跃于SO上,但是所有Postgres开发人员和专家都阅读了邮件列表
—
a_horse_with_no_name
USING
稍快 -因为结果矩阵中的列减少了一列。您的发现可以追溯到2005年和2008年。我认为到目前为止,所有问题都已得到解决。但是,我看到一个可能的局限性:USING
可能必须按顺序应用的 JOIN ,因为生成的连接列是一个联合产品。从而潜在地限制了JOIN的重新排序中的选项。