exist和in

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版本,不同版本情況不一樣

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