MySQL中EXISTS和IN的比較


EXISTS用於檢查子查詢是否至少會返回一行數據,該子查詢實際上並不返回任何數據,而是返回值True或False
EXISTS 指定一個子查詢,檢測 行 的存在。


select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME in(select BNAME from TableEx)

這兩個查詢返回相同結果,也就是TableIn表的name 需要在 TableEx表的name存在。如果exists子查詢是有結果集,就返回true,否則返回false;
exists的運行方式:先運行主查詢一次 再去子查詢里查詢是否有對應記錄,如果有,返回ture,反之返回false,再根據主查詢中的每一行去子查詢里去查詢.

IN的運行方式:in的子查詢要返回結果集。子查詢先產生結果集,然后主查詢再去結果集里去找符合要求的字段列表去.

EXISTS與IN的使用效率比較,通常情況下采用exists要比in效率高,因為IN不走索引,但要看實際情況具體使用:IN適合於外表大而內表小的情況;EXISTS適合於外表小而內表大的情況。

NOT IN 和 NOT EXISTS的道理是一樣的,NOT EXISTS的效率依然高於NOT IN

 

文章借鑒於:https://www.cnblogs.com/qlqwjy/p/8598091.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM