通過關鍵字 explain 可以分析出:
1. 表的讀取順序
2. 表的讀取操作的讀取型別
3. 哪些索引有可能會被使用到
4. 哪些索引被實際使用了
5. 表之間的引用
6. 每張表有多少行被優化器查詢
每個欄位的含義:
2. select_type - 查詢型別,是簡單查詢、子查詢、主鍵查詢等,具體型別如下:
******(簡單的select語句)
primary(查詢中最外層的select)/union(查詢中處於內層的select)
dependent union(union操作中,查詢中處於內層的select)/unioin result(union操作的結果,id值通常為nul)
subquery(子查詢中首個select)/dependent subquery(嚴重消耗效能)(子查詢中首個select,但依賴於外層的表)
derived(被驅動的select子查詢)/materialized(被物化的子查詢)
uncacheable subquery(對於外層的主表,子查詢不可被物化,每次都需要計算)/uncacheable union(union操作中,內層的不可被物化的子查詢)
3. table - 該行所引用的表名
4. type - 顯示了查詢使用到了那種型別,從最優的查詢到最差的排序為:索引type從優到差:system-->const-->eq_ref-->ref-->ref_or_null-->index_merge-->unique_subquery-->index_subquery-->range-->index-->all(全表掃瞄)
5. possible_key - 能會用到那些索引在該表中找到行級記錄
6. key - 實際從 possible_key 選擇使用的索引。如果為 null,則沒有使用索引。很少的情況 下,mysql 會選擇優化不足的索引。這種情 況下,可以在 select語句中使用 use index (indexname)來強制使用乙個索引或者用ignore index(indexname)來強制 mysql 忽略索引.
7. key_len - 使用的索引的長度。在不損失精確性的情況下,長度越短越好。
8. ref - 顯示索引的哪一列被使用了,如果可能的話,是乙個常數,哪些列或者常量被用於查詢索引列上的值。
9. rows - 顯示mysql認為它執行查詢時必須檢查的行數。多行之間的資料相乘可以估算要處理的行數。
10. filtered - 顯示了通過條件過濾出的行數的百分比估計值。
11. extra - 就是除了以上mysql要展示的重要的資訊之外的乙個附加資訊,一般四種情況
using filesort
using temporary
using index
not exists
重要!key、type 、rows、extra,其中 key 為 null 時,說明沒有使用到索引,需要調整索引,type為all的地方,都是需要進行優化的地方.一般需要達到 ref級別,範圍查詢需要達到 range,extra有using filesort、using temporary 的一定需要優化,根據rows可以直**出優化結果。
explain優化sql語句
1.explain是用來對select語句查詢效率檢視的語句,通過explain我們可以優化自己的sql語句。執行完explain後有幾個關鍵的字段,type ref key y extra using where type 表示搜尋的型別,好壞依次為system const eq ref ref ...
sql優化工具使用之explain
在工作中,我們用於捕捉效能問題最常用的就是開啟慢查詢,定位執行效率差的sql,那麼當我們定位到乙個sql以後還不算完事,我們還需要知道該sql的執行計畫,比如是全表掃瞄,還是索引掃瞄,這些都需要通過explain去完成。explain命令是檢視優化器如何決定執行查詢的主要方法。可以幫助我們深入了解m...
SQL優化 02 執行計畫 EXPLAIN
explain語句可以獲得關於mysql如何執行select語句的資訊,借助於explain,可以知道什麼時候必須為表加入索引以得到乙個使用索引來尋找記錄的更快的select。explain extended select select options示例用到的原始表如下 表中的索引如下圖所示 執行...