oracle 中 一些 sql 的效率問題

個人觀點,爲了更好的記憶:

 '>'  表示快的意思

not exists  > join  > exist > in > disinct > not in

 

我發現distinct 也太慢了。

我想是因爲它要在結果集中遍歷的緣故。所以,儘量用join不要用distinct.

 

另外,a.name = b.name(+),  這個是與 from a  left join b on a.name = b.name. 不同的。當a是null的時候,左聯不到a.

 

--   一對多
--  distinct
SELECT distinct a.*  FROM xe_wf_act_def a, xe_wf_act b WHERE a.wf_act_def_id = b.wf_act_def_id


-- exists
select a.* from xe_wf_act_def a where exists (select b.* from xe_wf_act b where a.wf_act_def_id = b.wf_act_def_id)


 -- in
select a.* from xe_wf_act_def a where  a.WF_ACT_DEF_ID in (select b.WF_ACT_DEF_ID from xe_wf_act b)
 
 -- not exists
select a.* from xe_wf_act_def a where not exists (select b.* from xe_wf_act b where a.wf_act_def_id = b.wf_act_def_id)


-- not in
select a.* from xe_wf_act_def a where a.WF_ACT_DEF_ID not in (select b.WF_ACT_DEF_ID from xe_wf_act b)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章