left join效率為什么低 left join效率為什么低?
left join效率為什么低?為什么子查詢比連接查詢(LEFT JOIN)效率低MySQL從4.1版本開始支持子查詢,使用子查詢進行SELECT語句嵌套查詢,可以一次完成很多邏輯上需要多個步驟才能完
left join效率為什么低?
為什么子查詢比連接查詢(LEFT JOIN)效率低
MySQL從4.1版本開始支持子查詢,使用子查詢進行SELECT語句嵌套查詢,可以一次完成很多邏輯上需要多個步驟才能完成的SQL操作。子查詢雖然很靈活,但是執(zhí)行效率并不高。
那么問題來了,什么是子查詢?為什么它的效率不高?
子查詢:把內層查詢結果當作外層查詢的比較條件
示例:
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods)
執(zhí)行子查詢時,MYSQL需要創(chuàng)建臨時表,查詢完畢后再刪除這些臨時表,所以,子查詢的速度會受到一定的影響,這里多了一個創(chuàng)建和銷毀臨時表的過程。
優(yōu)化方式:
可以使用連接查詢(JOIN)代替子查詢,連接查詢不需要建立臨時表,因此其速度比子查詢快。
leftjoin為什么不能超過三張表?
任何一個數(shù)據(jù)庫都沒有規(guī)定不能超過多少表,left join表越多需要更加注意sql的匹配順序,只有最先匹配出最少的數(shù)據(jù)才能保證sql的執(zhí)行效率
SQL中l(wèi)eftjoin連接多張表?
1、兩個表連接
select a.*,b.* from a left join b on a.id =b.id;
2、三個以上
select a.*,b.* from a left join b on a.id=b.id left join c on a.id=b.id where …;
3、可以有多種變換,連接條件,顯示字段跟具體結合具體場景靈活運用。
擴展資料
論SQL語句中的多表關系
1、一對多 - 用于去重 - left join 要連接的表 on 唯一字段(標識) = 多字段
2、一對一 - 用于查詢 - left join 要連接的表 on 唯一字段 = 唯一字段
3、多對一 - 用于分組 - left join 要連接的表 on 多字段 = 唯一字段