當前位置:
首頁 > 知識 > MySQL NOT IN用LEFT JOIN優化

MySQL NOT IN用LEFT JOIN優化

項目中有一個需求,B表會從A表中選一些數據進來。那麼在選擇的時候,就要查詢出:A表中狀態為啟用(1),且不包含B表已選中的數據。

假設A表有ID為1-20的數據,B已經選了1,2,19,查詢的時候就必須排除這三條數據。

首先的想法如下:

SELECT * FROM tab_a WHERE id NOT IN (:ids) AND status = 1;

ids為B表已選中的ID集。

因為NOT IN是不走索引的,所以這種寫法很不好,數據量小的話還湊合,一旦大起來就不行了。

優化的方案採用LEFT JOIN:


SELECT a.* FROM tab_a AS a LEFT JOIN (SELECT * FROM tab_a WHERE id IN (:ids)) AS b ON a.id=b.id WHERE b.id IS NULL AND a.status=1;

MySQL NOT IN用LEFT JOIN優化

打開今日頭條,查看更多圖片

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java個人學習心得 的精彩文章:

TAG:Java個人學習心得 |