mysql進階 with-as 性能調優



使用前提:多次重復出現的子查詢

with-as 意義:對於多次反復出現的子查詢,可以降低掃描表的次數和減少代碼重寫,優化性能和使編碼更加簡潔

✿ 使用注意事項:

1、mysql版本: 8以及8以上的

2、首先定義子查詢的臨時虛擬表

語法: with 臨時表名 as 子查詢,定義出(子查詢)的虛擬臨時表,然后定義之后需要立馬引用才有意義

即:定義好with子查詢,但其后沒有跟select查詢引用,會報錯!
即:臨時虛擬表需要立即引用它,with子查詢語句必須定義在引用它的select語句之前!

3、定義多個子查詢的臨時表,這多個子查詢共用一個with子查詢之間使用,隔開

注意:子查詢與引用之間不能加,

 #WITH AS 語法: WITH 虛擬臨時表名 AS (子查詢) +引用

  WITH temp AS (select * from t_teacher) # 定義子查詢
  (SELECT `name` FROM temp) t1,		    # 多次引用子查詢的臨時虛擬表
  (SELECT age FROM temp) t2,
  (SELECT sex FROM temp) t3
  WHERE t1.id = t2.id AND t1.id = t3.id and t2.id = t3.id;
  #WITH AS 語法(定義多個子查詢)
  WITH 
	temp1 AS (select * from t_teacher), 
	temp2 AS (select * from t_stu),
	temp3 AS (select * from t_user)
	select count(*) FROM temp1......
	#....引用即可.....#

✿ 重復子查詢之with-as是否使用效率對比:

  • 沒有使用with-as:selet 物理表時掃描了兩次
  • 使用了with-as:select 臨時表,節約了一次加載時間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM