從a表查詢出關聯字段在b表中不出現的所有記錄,現在兩數據表有數據大概都約為2萬5千條記錄,b表相對a表少了230條記錄,所以要查詢a表多出來的記錄,關聯字段是a表的id與b表aid,查詢方法分別用常見的三種方法
代碼如下 復制代碼select a.id from a left join b ON a.id=b.aid where b.aid is NULL;
select a.id from a where a.id not in (select b.aid from b);
select a.id from a where not exists (select null from b where b.aid=a.id);
用join的is null方法結果:230 rows in set(39 min 0.48 sec)
not in方法結果:230 rows in set (38 min 7.48 sec)
not exists方法結果:230 rows in set (37 min 52.44 sec)
暈了,為什麼都是這樣慢呢?哪裡出錯了?
原來b表的aid沒建索引,建立索引後再查詢就快了很多很多,索引後再查詢三種方法大概都只用了0.52sec就出來結果了,索引與沒索引會有這樣強烈的差異,所以對於這種查詢,一定要對關聯字段建立索引哦,要不你就只有接受龜迅了!