使用連接(JOIN)來代替子查詢(Sub-Queries)
MySQL從4.1開始支持SQL的子查詢。這個技術(shù)可以使用SELECT語句來創(chuàng)建一個單列的查詢結(jié)果,然后把這個結(jié)果作為過濾條件用在另一個查詢中。例如,我們要將客戶基本信息表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售信息表中將所有發(fā)出訂單的客戶ID取出來,然后將結(jié)果傳遞給主查詢,如下所示:
DELETE FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的SQL操作,同時也可以避免事務(wù)或者表鎖死,并且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連接(JOIN).. 替代。例如,假設(shè)我們要將所有沒有訂單記錄的用戶取出來,可以用下面這個查詢完成:
SELECT * FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
如果使用連接(JOIN).. 來完成這個查詢工作,速度將會快很多。尤其是當(dāng)salesinfo表中對CustomerID建有索引的話,性能將會更好,查詢?nèi)缦拢?
SELECT * FROM customerinfo
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.
CustomerID
WHERE salesinfo.CustomerID IS NULL
連接(JOIN).. 之所以更有效率一些,是因?yàn)?MySQL不需要在內(nèi)存中創(chuàng)建臨時表來完成這個邏輯上的需要兩個步驟的查詢工作
總結(jié)
本文關(guān)于MySQL優(yōu)化之使用連接(join)代替子查詢的內(nèi)容就到這里,僅供參考。如有不足之處請指出。歡迎大家交流討論。感謝朋友們對本站的支持。
您可能感興趣的文章:- MySQL里面的子查詢實(shí)例
- 解決MySQL中IN子查詢會導(dǎo)致無法使用索引問題
- 詳細(xì)講述MySQL中的子查詢操作
- 詳解MySQL子查詢(嵌套查詢)、聯(lián)結(jié)表、組合查詢
- mysql in語句子查詢效率慢的優(yōu)化技巧示例
- Mysql子查詢IN中使用LIMIT應(yīng)用示例
- MYSQL子查詢和嵌套查詢優(yōu)化實(shí)例解析
- mysql實(shí)現(xiàn)多表關(guān)聯(lián)統(tǒng)計(jì)(子查詢統(tǒng)計(jì))示例
- MySQL筆記之子查詢使用介紹
- MySQL子查詢中order by不生效問題的解決方法