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