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

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.