explain是mysql自帶的乙個分析sql的小功能,只需要在任何一條sql語句之前,就能得到這條sql相應的執行資訊。將會也何種方式執行、大致會掃瞄多少資料等
查詢中的每個表都會輸出一行記錄,如果用了join連線查詢,幾個表就會生成幾行
id 列的編號相當於select 的序號,有幾個select 就有幾個id,並且id是按這條sql語句**現的順序增長的。id列越大,執行優先順序就越高,id相同則從上往下執行。
上圖可以看到子查詢語句select actor_id from film_actor where film_id = 1
id為2,優先執行,從邏輯上來說也是同樣,得先執行子查詢後得到結果作為前面查詢的條件。
這列的資訊表示對應行的查詢是什麼型別的查詢,是簡單的查詢還是複雜的查詢,有一下幾個值
1): ****** 簡單查詢:即查詢不包含子查詢的查詢,如:
select * from table_name where file_name = ?
2):primary:複雜查詢中最外層的select
可以理解為id最小的那個select 就是最終要查詢的字段那個select
3):subquery:包含在 select 中的子查詢(不在 from 子句中)
4):derived:包含在 from 子句中的子查詢。mysql會將結果存放在乙個臨時表中,也稱為派生表
這一列即表示這次explain的語句訪問的是哪個表。
當from後有子查詢的時候,即表示當前的這個select 查詢需要依賴 id=n的查詢,於是就先執行id =n的查詢。上述列子中id為一的查詢依賴的為 3就是select * from film where id =1 的子查詢。
該列的屬性是最重要的,mysql的優化其實也主要圍繞著該列來進行優化。該列表示mysql是以什麼樣的方式查詢表中的行。查詢資料行記錄大概的範圍。
在優化過程中,盡量讓一條查詢語句達到range級別,最好達到ref
屬性如下:
1.null:mysql能夠在優化階段完成對查詢語句分析,當達到某種條件,如使用聚合函式min/max等,分析出可能在執行階段甚至不用去訪問表或者索引就可以得到結果,那麼這種type屬性就為null。表示不用訪問表就能拿到資料,也是最快的一種查詢方式。如:
見名知意,const為常量,表示這條sql語句就和查詢乙個常量一樣速度非常快。表示mysql能對查詢的某個部分進行優化,將其轉化為乙個常量。然後將該常量用於類似primary key,unique key 做比較時,表中只可能有一行資料滿足條件。system為const的特例,表示表中只會有一條資料滿足條件。
示例:pandas 是基於numpy 的一種工具,該工具是為了解決資料分析任務而建立的。
select * from film where id = 1;從主鍵索引表中查詢到id為一的記錄 為const
3.eq_ref:primary key 或 unique key 索引的所有部分被連線使用 ,最多隻會返回一條符合條件的記錄。這可能是在const 之外最好的聯接型別了,簡單的 select 查詢不會出現這種 type。
4.ref:ref相比於前一種eq_ref區別在於,沒有使用唯一索引,或者只使用了唯一索引的部分字首,索引和某個值進行比較返回的可能是多條資料
關聯查詢:
這裡值使用到了聯合索引中最左邊的film_id部分 ,所以type為ref
5.range:範圍查詢
範圍掃瞄一般出現在如in(),between,>,《等操作中,使用乙個索引來確定查詢的範圍
explain select * from actor where id > 1;
7.all
all是所有型別中效能最差的一種,會進行全表掃瞄,即掃瞄聚簇索引中的所有葉子節點。需要對其進行優化。
這一列顯示這條sql語句查詢時,可能會使用哪些索引來進行查詢。如果該列為null,即表示沒有相關的索引。當遇到這種情況時,可以嘗試在where 字句當中能否創造乙個適當的索引並使用該索引來提高查詢的效能。
這一列表示實際執行該條sql語句時,選用了哪個索引來進行查詢,如果沒有使用索引,該列的值就為null。在查詢中可以使用force index,或者ignore index來強制使用 或者或略索引。
這一列顯示了使用了索引中字段的位元組數,通過該值可以得出使用了索引中哪些字段。
這一列展示的額外資訊
mysql執行計畫 MySQL 執行計畫
1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....
mysql 生成執行計畫 MySQL執行計畫
和很多其他關係型資料庫不通,mysql並不會在生成查詢位元組碼來執行查詢。mysql生成查詢的一棵指令樹,然後通過儲存引擎執行完成這棵指令樹並返回結果。最終的執行計畫包含了重構查詢的全部資訊。如果某個查詢執行explain extended 之後,在執行show warnings,就可以看到重構出的...
mysql 查詢執行計畫 MySql執行計畫的檢視
一。什麼是資料庫執行計畫 利用乙個sql語句,你可能要server取出所有news表中的資訊.當server收到的這條sql的時候,第一件事情並不是解析它.如果這條sql沒有語法錯誤,server才會繼續工作.server會決定最好的計算方式.server會選擇,是讀整個news表好呢,還是利用索引...