SQL優化 Exists和in的效率哪個高

2021-06-09 20:41:44 字數 1433 閱讀 4584

系統要求進行sql優化,對效率比較低的sql進行優化,使其執行效率更高,其中要求對sql中的部分in/not in修改為exists/not exists

修改方法如下:

in的sql語句

select id, category_id, htmlfile, title, convert(varchar(20),begintime,112) as pubtime

from tab_oa_pub where is_check=1 and

category_id in (select id from tab_oa_pub_cate where no='1')

order by begintime desc

修改為exists的sql語句

select id, category_id, htmlfile, title, convert(varchar(20),begintime,112) as pubtime

from tab_oa_pub where is_check=1 and

exists (select id from tab_oa_pub_cate where tab_oa_pub.category_id=convert(int,no) and no='1')

order by begintime desc

分析一下exists真的就比in的效率高嗎?

在oracle sql中取資料時有時要用到in 和 exists 那麼他們有什麼區別呢?

1 效能上的比較

比如select * from t1 where x in ( select y from t2 )

執行的過程相當於:

select *

from t1, ( select distinct y from t2 ) t2

where t1.x = t2.y;

相對的select * from t1 where exists ( select null from t2 where y = x )

執行的過程相當於:

for x in ( select * from t1 )

loop

if ( exists ( select null from t2 where y = x.x )

then

output the record

end if

end loop

表 t1 不可避免的要被完全掃瞄一遍

分別適用在什麼情況?

以子查詢 ( select y from t2 )為考慮方向

如果子查詢的結果集很大需要消耗很多時間,但是t1比較小執行( select null from t2 where y = x.x )非常快,那麼exists就比較適合用在這裡

相對應得子查詢的結果集比較小的時候就應該使用in.

以上來自

sql語句in和exists的效率

select a.from a where exists select 1 from b where a.id b.id 和select a.from a where a.id in select b.id from b 的效率比較 1.如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應...

sql中in和exists的區別

in是把外表和內錶作hash連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢,一直以來認為exists比in效率高的說法是不準確的。如果查詢的兩個表大小相當,那麼用in和exists差別不大 如果兩個表中乙個較小乙個較大,則子查詢表大的用exists,子查詢錶小的用in ...

SQL中in和exists的區別

in和exists in 是把外表和內錶作hash 連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。in parm1,parm2.parm是有個數限制的 如果兩個表中乙個較小,乙個是大表,則子查詢表大的用exists,子查詢錶小的用in 例如 表a 小表 表b 大表 1...