【发布时间】:2017-01-05 22:27:52
【问题描述】:
这两种说法有区别吗:
-- Statement 1:
SELECT *
FROM Table1 t1
LEFT OUTER JOIN TABLE2 t2 on t1.id = t2.id
和
-- Statement 2:
SELECT *
FROM Table1 t1
LEFT OUTER JOIN (SELECT id, a, b, c FROM Table2) t2 on t1.id = t2.id
我不是专家,但语句 2 看起来就像写得不好的 sql,而且需要更长的时间。我正在尝试优化一个代码块,它有很多像第二个一样的连接。它们在技术上是否相同,我可以用标准连接语句 1 替换吗?
谢谢!
附言。这就是 Oracle,它处理数以百万计的行。
PSS。我正在做自己的侦探工作,以确定它们是否相同,以及时间差异,希望专家能够解释是否存在技术差异。
【问题讨论】:
-
如果Table2的列数超过4列,那么语句2就是对结果集进行限制。数据越少加载速度越快。
-
解释计划是你的朋友。
-
@DVJex:第二个只限制列数,不限制行数。
-
第二个查询等价于
SELECT t1.*, t2.id, t2.a, t2.b, t2.c FROM Table1 t1 LEFT OUTER JOIN TABLE2 t2 on t1.id = t2.id,如果这些都是 table2 的所有列,那么两个查询是 100% 相同的,Oracle 几乎肯定会为两者使用相同的执行计划。
标签: oracle select outer-join