mysql優化子查詢 join

2021-09-14 06:42:26 字數 911 閱讀 2070

使用連線(join)來代替子查詢(sub-queries)

mysql從4.1開始支援sql的子查詢。這個技術可以使用select語句來建立乙個單列的查詢結果,然後把這個結果作為過濾條件用在另乙個查詢中。例如,我們要將客戶基本資訊表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售資訊表中將所有發出訂單的客戶id取出來,然後將結果傳遞給主查詢,如下所示: 

delete from customerinfo 

where customerid not in (select customerid from salesinfo )

使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的sql操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連線(join).. 替代。例如,假設我們要將所有沒有訂單記錄的使用者取出來,可以用下面這個查詢完成: 

select * from customerinfo 

where customerid not in (select customerid from salesinfo )

如果使用連線(join).. 來完成這個查詢工作,速度將會快很多。尤其是當salesinfo表中對customerid建有索引的話,效能將會更好,查詢如下: 

select * from customerinfo 

left join salesinfo on customerinfo.customerid=salesinfo.

customerid

where salesinfo.customerid is null

連線(join).. 之所以更有效率一些,是因為 mysql不需要在記憶體中建立臨時表來完成這個邏輯上的需要兩個步驟的查詢工作 

mysql利用join優化子查詢

有表user id,name 和code id,student code 如果要查詢code在user中的對應的全部內容 沒有就為null 方式1 子查詢 select a.id a,name select b.student code from code c where c.id u.id fro...

mysql版本優化子查詢 MySQL優化子查詢

我想優化這個查詢 因為子查詢一般來說速度不快 但是我輸了,因為我無法使用連線來重寫它,這對於效能更好,你能幫助mi嗎?select id,company,street,number,number addition,postalcode,telephone from clients where pos...

mysql 優化 子查詢和left join(一)

今天針對乙個mysql做優化 具體如下設計到幾張表 商品表 goods 會員消費表 member consumes 會員表 members 會員標籤表member label 分組標籤表 group label 大體功能是這樣的在分組營銷的分組資料下面檢視會員消費前十的商品是哪些 比如 在孕婦裝分組...