詳細解釋MySQL explain 中的 select_type 是什么


simple

查詢語句中不包含UNION或者子查詢的查詢都算作是SIMPLE類型,無論是單表查詢還是聯合查詢這些查詢的級別都是 simple。顧名思義,這些查詢都被 MySQL 認為是比較簡單的查詢模式。

單表查詢:

連接查詢:

使用子查詢:

這里需要說明的一點是,其實子查詢嚴格意義上不是 simple 級別的,但是我這里舉得這個例子比較特殊,原理是因為這個 SQL 在MySQL 的查詢優化器上被優化成了連接查詢,所以才會出現這種情況。換句話說,這個 SQL 最終執行的內容和上面的這個 SQL 是一種類型。

primary

對於包含UNION、UNION ALL或者子查詢的大查詢來說,它是由幾個小查詢組成的,其中最左邊的那個查詢的select_type值就是PRIMARY

比如說:

union

接着上面的說,包含UNION、UNION ALL或者子查詢的大查詢來說,它是由幾個小查詢組成的嘛。除了第一個是 PRIMARY,其他的都是 UNION

UNION RESULT

還是接着上面說,如果 MySQL 中的 UNION 需要用到臨時表進行去重的話,那么這個小查詢的級別就是 UNION RESULT

SUBQUERY

如果我們的子查詢不能轉換對應 semi-join的形式,而且這個查詢不是相關子查詢的話,並且查詢優化器決定采用將該子查詢物化的方案來執行該子查詢時,這個時候該子查詢的第一個 SELECT 的級別就是 SUBQUERY

DEPENDENT SUBQUERY

如果包含子查詢的查詢語句不能夠轉為對應的semi-join的形式,並且該子查詢是相關子查詢,則該子查詢的第一個SELECT關鍵字代表的那個查詢的select_type就是DEPENDENT SUBQUERY

DEPENDENT UNION

在包含UNION或者UNION ALL的大查詢中,如果各個小查詢都依賴於外層查詢的話,那除了最左邊的那個小查詢之外,其余的小查詢的select_type的值就是DEPENDENT UNION

該隨筆為學習筆記,內容源自《MySQL 是怎樣運行的:從根兒上理解 MySQL》


免責聲明!

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



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