Posted on 2006-12-25 14:30
壯士日志 閱讀(26250)
評(píng)論(7) 編輯 收藏 所屬分類:
編程技術(shù)
select * from a,b where a.id=b.id(+);
select * from a left join b on a.id=b.id;
很多資料說上面兩個(gè)語句的效果是一樣的,實(shí)際上今天經(jīng)過測(cè)試發(fā)現(xiàn)兩者的執(zhí)行計(jì)劃大不相同(查詢結(jié)果是一樣的);
至于為什么會(huì)這樣,暫時(shí)沒有深究,手頭的一個(gè)例子表明按照第一種寫法的效率會(huì)高,或許其他的例子結(jié)果不一樣,等有時(shí)間的時(shí)候再測(cè)試一下吧.
Feedback
# re: oracle 的left join和(+)真的可以起到一樣的效果嗎? 回復(fù) 更多評(píng)論
2007-12-14 10:11 by
是的,我也發(fā)現(xiàn)了這個(gè)問題。
因?yàn)樗俣鹊脑颍铧c(diǎn)搞死我!
不得已又換成了+號(hào),
速度居然有兩倍的差距!!
要是你有什么好的資料或結(jié)果的話,
請(qǐng)告訴我一聲,謝謝。
wang20yin@126.com
# re: oracle 的left join和(+)真的可以起到一樣的效果嗎? 回復(fù) 更多評(píng)論
2008-09-16 11:59 by
學(xué)習(xí),呵呵
# re: oracle 的left join和(+)真的可以起到一樣的效果嗎?[未登錄] 回復(fù) 更多評(píng)論
2008-10-06 14:44 by
把不同的執(zhí)行計(jì)劃貼出來看看啊。
# re: oracle 的left join和(+)真的可以起到一樣的效果嗎?[未登錄] 回復(fù) 更多評(píng)論
2009-01-19 12:17 by
select * from a,b where a.id=b.id(+) and a.flg = '0';
select * from a left join b on a.id=b.id and a.flg = '0';
條件追加:
-〉and a.flg = '0'
你看一下區(qū)別吧!
處理方法:
select * from a left join b on a.id=b.id and a.flg = '0';
同下!
select * from a ,b where a.id=b.id and (a.flg = '0' or a.flg is null);
# re: oracle 的left join和(+)真的可以起到一樣的效果嗎? 回復(fù) 更多評(píng)論
2010-04-01 18:02 by
這個(gè)是版本問題 好像9i以后 才增加的left join 以前都是使用(+)
后續(xù)版本向下兼容 所以9i之后 這兩者是通用的 但建議使用left jion增加可讀性
# re: oracle 的left join和(+)真的可以起到一樣的效果嗎?[未登錄] 回復(fù) 更多評(píng)論
2011-05-12 09:58 by
@aa
select * from a,b where a.id=b.id(+) and a.flg = '0';
select * from a left join b on a.id=b.id and a.flg = '0';
這兩個(gè)不對(duì)等,
把第一個(gè)修改一下
select * from a,b where a.id=b.id(+) and a.flg(+) = '0';
這樣 就和
select * from a left join b on a.id=b.id and a.flg = '0';
對(duì)等了
# re: oracle 的left join和(+)真的可以起到一樣的效果嗎?[未登錄] 回復(fù) 更多評(píng)論
2011-07-19 09:53 by
oracle 在解析的時(shí)候會(huì)把left join right join 都轉(zhuǎn)換成+
如果你寫sql的時(shí)候都是用+就少了轉(zhuǎn)換