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沒有索引呢?
可能結果就不一樣了