程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql中not in,not exists與join的is null效率對比

mysql中not in,not exists與join的is null效率對比

編輯:MySQL綜合教程

以前我剛學php時就問我一朋友mysql中not in,not exists與join的is null這幾個函數他們的性能怎麼樣,那樣更好一些,下面我來作一個簡單的測試。

從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就出來結果了,索引與沒索引會有這樣強烈的差異,所以對於這種查詢,一定要對關聯字段建立索引哦,要不你就只有接受龜迅了!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved