MySQL5.7效能優化系列(二)——SQL語句優化(2)——子查詢-派生表-檢視--概述
阿新 • • 發佈:2019-02-17
章節內容:
- 使用Semi-join連線優化子查詢、派生表、檢視
- 使用Materialization優化子查詢
- 優化派生表、檢視
- 使用Exist 策略優化子查詢
概述
in或者any子查詢
MySQL查詢優化器具有不同的策略來評估子查詢。對於IN(或= ANY)子查詢,優化器具有以下選擇:
- Semi-join 半連線策略
- Materialization物化策略
- EXISTS 策略
not in (<>或者all) 子查詢
對於NOT IN(或<> ALL)子查詢,優化器具有以下選擇:
- Materialization物化策略
- EXISTS 策略
派生表(from 子句中的子查詢)
對於派生表(FROM子句中的子查詢),優化器具有以下選項:
- 將派生表合併到外部查詢塊中
- 將派生表實現為內部臨時表
檢視
對於檢視,優化器與派生表具有相同的選擇。
- 將檢視合併到外部查詢塊中
- 將檢視實現為內部臨時表
以下討論提供了有關上述優化策略的更多資訊。
注意:
使用子查詢修改單個表的UPDATE和DELETE語句的限制,優化器不使用semi-join連線或Materialization子查詢優化。作為解決方法,請嘗試將其重寫為使用連線而不是子查詢的多表UPDATE和DELETE語句