mysql的執行計畫檢視很簡單,乙個單詞explain就可以搞定了。
舉乙個例子:
mysql>explain select * from student where sid >=0 and sid<=1 \g
id:1 (
select
查詢序列號 id相同,執行順序由上至下;id不同,id值越大優先順序越高,越先被執行)
select_type:******(查詢資料的操作型別,有如下:
簡單查詢,不包含子查詢或union
包含複雜的子查詢,最外層查詢標記為該值
在select或where裡包含子查詢,被標記為該值
在from列表中包含的子查詢被標記為該值,mysql會遞迴執行這些子查詢,把結果放在臨時表
若第二個select出現在union之後,則被標記為該值
若union包含在from的子查詢中,外層select被標記為derived
從union表獲取結果的select)
table:student(顯示該行資料是關於哪張表)
partitions:null(匹配的分割槽)
type:range(表的連線型別,其值、效能由高到底排列如下:
①system
表只有一行記錄,相當於系統表
②const
通過索引一次就找到,只匹配一行資料
③eq_ref
唯一性索引掃瞄,對於每個索引鍵,表中只有一條記錄與之匹配
常用於主鍵或唯一索引掃瞄
④ref
非唯一性索引掃瞄,返回匹配某個單獨值的所有行
用於=、< 或 > 操作符帶索引的列
⑤range
只檢索給定範圍的行,使用乙個索引來選擇行
一般使用between、>、<
⑥index
只遍歷索引樹
全表掃瞄,效能最差)
possible_keys:sid(指出 mysql 使用哪個索引在該錶找到行記錄。如果該值為 null,說明沒有使用索引,可以建立索引提高效能)
key:sid(顯示 mysql 實際使用的索引。如果為 null,則沒有使用索引查詢)
key_len:5(表示索引中使用的位元組數,通過該列計算查詢中使用的索引的長度。在不損失精確性的情況下,長度越短越好顯示的是索引欄位的最大長度,並非實際使用長度)
ref:null(顯示該錶的索引字段關聯了哪張表的哪個字段)
rows:13(根據表統計資訊及選用情況,大致估算出找到所需的記錄或所需讀取的行數,數值越小越好)
filter:100,00(返回結果的行數佔讀取行數的百分比,值越大越好)
extra:using index condition(包含不適合在其他列中顯示但十分重要的額外資訊:①using filesort
mysql
會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取
若出現有該值,應該優化sql語句
②using temporary
使用臨時表儲存中間結果,比如,mysql在對查詢結果排序時使用臨時表
常見於order by和group by
若出現有該值,應該優化sql語句
③using index
表示select操作使用了覆蓋索引,避免了訪問表的資料行,效率不錯
④using where
where
子句用於限制哪一行
⑤using join buffer
使用連線快取
⑥distinct
MySQL執行計畫 EXPLAIN引數
explain select from school desc select from school 執行結果 執行計畫引數.png 接下來對這10個引數進行簡單解釋 1 id 在整個查詢中select的位置 2 select type 查詢的型別,包括沒有子查詢的簡單查詢 union 子查詢 外部...
mysql執行計畫 MySQL 執行計畫
1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....
mysql 生成執行計畫 MySQL執行計畫
和很多其他關係型資料庫不通,mysql並不會在生成查詢位元組碼來執行查詢。mysql生成查詢的一棵指令樹,然後通過儲存引擎執行完成這棵指令樹並返回結果。最終的執行計畫包含了重構查詢的全部資訊。如果某個查詢執行explain extended 之後,在執行show warnings,就可以看到重構出的...