【发布时间】:2017-03-24 11:22:04
【问题描述】:
select
a,
b,
(select x from table3 where id = z.id) as c,
d
from
table1 z, table2 zz
where z.id = zz.id;
我知道查询可以很容易地简化如下:
select a,
b,
c.x,
d
from
table1 z,table2 zz, table3 c,
where z.id = zz.id and z.id = c.id;
但我想知道 case1 中的性能影响或额外执行是什么,或者它们都具有相同的性能?只求知识。
【问题讨论】:
-
没有可比性。如果 table3 没有匹配,第一个查询将返回该列的 null,而第二个查询将不返回任何行。
-
今日提示:切换到现代、明确的
JOIN语法!更容易编写(没有错误),更容易阅读维护,如果需要更容易转换为外连接! -
@jarlh 我假设在有数据时进行比较。好吧,我知道编写这样的查询不是一个好习惯,但我正在研究使用这种编码风格的遗留代码。
-
好吧,如果它已经工作多年了,请不要碰它!
-
如果您使用标量子查询(如在您的第一条语句中),Oracle 将缓存结果。这意味着,如果您的不同 z.id 值数量相对较少,则可能会带来性能优势,因为它只需为每个不同的值运行一次子查询。
标签: sql database oracle query-performance