1. 程式人生 > >mysql not exists 和 not in對比

mysql not exists 和 not in對比

not exists比not in效率高
如果查詢語句使用了not in 那麼內外表都進行全表掃描,沒有用到索引;而not exists的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。 
分析:
1. select * from A where not exists (select * from B where B.id = A.id);
用了B的索引; 和exists的查詢方式一樣


2. select * from A where A.id not in (select id from B);
等價於:
select * from A where A.id != 1 and A.id != 2 and A.id != 3;//select id from B的返回值是1,2,3
可以知道not in是個範圍查詢,這種!=的範圍查詢無法使用任何索引,等於說A表的每條記錄,都要在B表裡遍歷一次,檢視B表裡是否存在這條記錄