A:select 字段 from a where id in (select id from b)
B:select 字段 from a where id exist (select id from b)
這兩條SQL語句看上去差別不大,數據量一大了,效率的差距還是很明顯的
兩條SQL出現這個差距的主要原因還是執行順序不同,A先執行子查詢再執行主表查詢,而B正好相反先查詢主表再查詢子查詢。用小表來驅動大表,簡單來說讓先執行的表是小表就可以了
所以我們得到的結論就是 b是小表,a是大表可以用in;a是小表,b是大表可以用exist。需要注意的是如果遇到了not in和not exist的直接用not exist,因爲not in不走索引,其實走不走索引也要看mysql版本,不同版本情況不一樣