MySQL中 in和exists的執行過程算法分析

A表: 100條數據 , B: 10條數據

select * from A where id in ( select aid from B )

先執行括號裏面的查詢,然後執行外面,總共需要查詢的次數的 B+1=11次
需要注意的是 括號裏面的查詢會緩存到內存中


select * from A where exists ( select aid from B where aid=A.id )

先執行括號外面的查詢,然後拿到外面的查詢結果去執行括號裏面的查詢
總共查詢的次數是 1+A=101次


得出的結論: 如果子查詢數量少,用in,子查詢數量達用 exists,也可以理解爲先查詢小的那個

這個結論也不是絕對的,還要考慮索引之類的優化,比如A小於B,按照上面的理論應該使用 exists,但是如果B有索引A沒有索引呢?
可能結果就不一樣了

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