Mysql join語句的優化

2021-06-22 17:29:07 字數 600 閱讀 8989

mysql4.1開始支援sql的子查詢。這個技術可以使用select語句來建立乙個單列的查詢結果,然後把這個結果作為過濾條件用在另乙個查詢中。使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的sql操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連線join替代。

假設我們要將所有沒有訂單記錄的使用者取出來,可以用下面這個查詢完成:

select * from customerinfo where customerid not in (select customerid from salesinfo )

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

select * from customerinfo

left join salesinfoon customerinfo.customerid=salesinfo.customerid

where salesinfo.customerid is null 

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

mysql語句解析 Mysql join語句解析

標籤 1.右連線 right join,right outer join 解釋 以右表 sys employee 為準,而左表 sys department 中的記錄只有當其departmentid在右表中存在時才會查詢出來 2.左連線 left join,left outer join 解釋 以左...

mysql join 語句執行解析

1 t1表的a1,t2表的a2,2 a1關聯a2 2 t1 100條資料,t2 100條資料 一 t1表是驅動表 驅動表全表掃瞄,設定驅動表 以資料小的表優先 如果a1加上索引,a2是主鍵 查詢的資料集是 100 100 先把t1的表從磁碟讀取記憶體,然後通過關聯字段區去索引頁查詢,索引直接定位t2...

mysql JOIN優化 清除filesort

1 顯示inner join 和 隱式inner join 顯示 select from a inner join b on a.mobile b.mobile 隱式 select from a inner join b where a.mobile b.mobile 10萬資料的查詢用時幾乎相等。...