《Mysql應用mysql查詢語句in與exists區別與性能分析》要點:
本文介紹了Mysql應用mysql查詢語句in與exists區別與性能分析,希望對您有用。如果有疑問,可以聯系我們。
導讀:一次面試中被人問到in 和 exists的區別,當然只是草草做答,現在來做下分析.mysql中的in語句是把外表和內表作hash 連接,而exists語句...
一次面試中被人問到in 和 exists的區別,當然只是草草做答,現在來做下分析.MYSQL實例
mysql中的in語句是把外表和內表作hash 連接,而exists語句是對外表作loop循環,每次loop循環再對內表進行查詢.
一直大家都認為exists比in語句的效率要高,這種說法其實是不準確的.這個是要區分環境的.
?
如果查詢的兩個表大小相當,那么用in和exists差別不大.
如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in:
例如:表A(小表),表B(大表)
?
1:
?MYSQL實例
select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc) 效率高,用到了B表上cc列的索引.
相反的
2:
?MYSQL實例
select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引;
select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引.
?
not in 和not exists如果查詢語句使用了not in 那么內外表都進行全表掃描,沒有用到索引;
而not extsts 的子查詢依然能用到表上的索引.所以無論那個表大,用not exists都比not in要快.
in 與 =的區別
?MYSQL實例
select name from student where name in ('zhang','wang','li','zhao');
與
select name from student where name='zhang' or name='li' or name='wang' or name='zhao'
?
的結果是相同的.MYSQL實例
轉載請注明本頁網址:
http://www.fzlkiss.com/jiaocheng/6196.html