二十二 in和exisits的區別

2021-09-28 14:43:49 字數 1283 閱讀 9535

區別:

1.in()適合b錶比a表資料小的情況。

2.exists()適合b錶比a表資料大的情況,當a表資料與b表資料一樣大時,in和exists的效率差不多,可以任選乙個使用。

select * from a

where id in(select id from b)

以上查詢使用了in語句,in()只執行一次,它查出b表中的所有id欄位並快取起來.之後,檢查a表的id是否與b表中的id相等,如果相等則將a表的記錄加入結果集中,直到遍歷完a表的所有記錄.

它的查詢過程類似於以下過程

list resultset=;

array a=(select * from a);

array b=(select id from b);

for(int i=0;i1000000次,效率很差。

再如:a表有10000條記錄,b表有100條記錄,那麼最多有可能遍歷10000100次,遍歷次數大大減少,效率大大提公升。

結論:in()適合b錶比a表資料小的情況。

select a.* from a a 

where exists(select 1 from b b where a.id=b.id)

以上查詢使用了exists語句,exists()會執行a.length次,它並不快取exists()結果集,因為exists()結果集的內容並不重要,重要的是結果集中是否有記錄,如果有則返回true,沒有則返回false.

它的查詢過程類似於以下過程

list resultset=;

array a=(select * from a)

for(int i=0;i}return resultset;

當b錶比a表資料大時適合使用exists(),因為它沒有那麼遍歷操作,只需要再執行一次查詢就行.

如:a表有10000條記錄,b表有1000000條記錄,那麼exists()會執行10000次去判斷a表中的id是否與b表中的id相等.

如:a表有10000條記錄,b表有100000000條記錄,那麼exists()還是執行10000次,因為它只執行a.length次,可見b表資料越多,越適合exists()發揮效果.

再如:a表有10000條記錄,b表有100條記錄,那麼exists()還是執行10000次,還不如使用in()遍歷10000*100次,因為in()是在記憶體裡遍歷比較,而exists()需要查詢資料庫,我們都知道查詢資料庫所消耗的效能更高,而記憶體比較很快.

結論:exists()適合b錶比a表資料大的情況

當a表資料與b表資料一樣大時,in與exists效率差不多,可任選乙個使用.

二十二,雜感

恩,二十二了,感覺是個turning point。二十二是中國男公民法定結婚年齡,但是因為我連女朋友都沒有,所以,這個話題暫不談論。其實剛到上海的時候,就準備把那些將要發生的辛酸點滴記錄下來,可是不知怎麼的,真正到辛酸的時候,卻不想去記憶了。那些歷程確實值得懷念,但是想起來就感覺不好,或許這就是所謂...

二十二 封裝

namespace demo7 this.age age this public int getage public void stuinfo 年齡為 方式一 public int age 方式二 private int age 字段 內部 public int age 讀取許可權 set 預設屬性...

HTML 頭部(二十二)

頭元素包含關於文件的概要資訊,也稱為元資訊 meta information meta 意為 關於某方面的資訊 可以這麼說,元資料 meta data 是關於資料的資訊,而元資訊是關於資訊的資訊。頭元素內的元素不會被瀏覽器顯示出來。根據 html 標準,僅有幾個標籤在 html 的頭部分是合法的。它...