mysql 查詢優化 ~explain解讀之select_type的解讀


一 簡介:今天咱們來聊聊explain的select_type

二 類型

 (1)SIMPLE

   簡單的SELECT語句(不包括UNION操作或子查詢操作)

 (2)PRIMARY/UNION

  PRIMARY:查詢中最外層的SELECT(如兩表做UNION或者存在子查詢的外層的表操作為PRIMARY,內層的操作為UNION)

  UNION:UNION操作中,查詢中處於內層的SELECT(內層的SELECT語句與外層的SELECT語句沒有依賴關系)

 (3)DEPENDENT UNION/UNIOIN RESULT

  DEPENDENT UNION:UNION操作中,查詢中處於內層的SELECT(內層的SELECT語句與外層的SELECT語句有依賴關系)

  UNION RESULT:UNION操作的結果,id值通常為NULL

  例子

  select * from people where zipcode=10000 union select * from people where zipcode=1000

 (4)SUBQUERY/DEPENDENT SUBQUERY

   SUBQUERY:子查詢中首個SELECT(如果有多個子查詢存在):

   DEPENDENT SUBQUERY:子查詢中首個SELECT,但依賴於外層的表(如果有多個子查詢存在)

   重點解釋 子查詢的查詢方式依賴於外面的查詢結果.用這個例子就是,先進行子查詢外部的查詢,得到一個結果集,.然后這個結果的每一行在跟select子查詢的結果集進行匹配,也就是說,外部結果集的每一行都要關聯內部結果集一次

 (5)DERIVED/MATERIALIZED

  DERIVED:被驅動的SELECT子查詢(子查詢位於FROM子句)

  例子 

  select aa from (select * from a) b;

  MATERIALIZED:被物化的子查詢

 (6)UNCACHEABLE SUBQUERY/UNCACHEABLE UNION

   UNCACHEABLE SUBQUERY:對於外層的主表,子查詢不可被物化,每次都需要計算(耗時操作)

   UNCACHEABLE UNION:UNION操作中,內層的不可被物化的子查詢(類似於UNCACHEABLE SUBQUERY)

三 注意
   特別關注 DEPENDENT SUBQUERY 

  1 會嚴重消耗性能

 2  不會進行子查詢,會先進行外部查詢,生成結果集,再在內部進行關聯查詢

 3 子查詢的執行效率受制於外層查詢的記錄數

 4 可以嘗試改成join查詢


免責聲明!

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



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