1. 程式人生 > >MySQL5.7效能優化系列(二)——SQL語句優化(2)——子查詢-派生表-檢視--概述

MySQL5.7效能優化系列(二)——SQL語句優化(2)——子查詢-派生表-檢視--概述

章節內容:

  • 使用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語句