explain select ....................
id:選擇識別符號
select_type:表示查詢的型別。
table:輸出結果集的表
partitions:匹配的分割槽
type:表示表的連線型別
possible_keys:表示查詢時,可能使用的索引
key:表示實際使用的索引
key_len:索引欄位的長度
ref:列與索引的比較
rows:掃瞄出的行數(估算的行數)
filtered:按表條件過濾的行百分比
extra:執**況的描述和說明
1. id相同時,執行順序由上至下
2. 如果是子查詢,id的序號會遞增,id值越大優先順序越高,越先被執行
3. id如果相同,可以認為是一組,從上往下順序執行;在所有組中,id值越大,優先順序越高,越先執行
分別用來表示查詢的型別,主要是用於區別普通查詢、聯合查詢、子查詢等的複雜查詢。
******簡單的select查詢,查詢中不包含子查詢或者union
primary查詢中若包含任何複雜的子部分,最外層查詢則被標記為primary
subquery在select或where列表中包含了子查詢
derived在from列表中包含的子查詢被標記為derived(衍生),mysql會遞迴執行這些子查詢,把結果放在臨時表中
union若第二個select出現在union之後,則被標記為union:若union包含在from子句的子查詢中,外層select將被標記為:derived
union result從union表獲取結果的select
system > const > eq_ref > ref > range > index > all
一般來說,得保證查詢至少達到range級別,最好能達到ref。
system表只有一行記錄(等於系統表),這是const型別的特列,平時不會出現,這個也可以忽略不計
const表示通過索引一次就找到了,const用於比較primary key 或者unique索引。因為只匹配一行資料,所以很快。如將主鍵置於where列表中,mysql就能將該查詢轉換為乙個常量。
eq_ref唯一性索引掃瞄,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃瞄
ref非唯一性索引掃瞄,返回匹配某個單獨值的所有行,本質上也是一種索引訪問,它返回所有匹配某個單獨值的行,然而,它可能會找到多個符合條件的行,所以他應該屬於查詢和掃瞄的混合體。
range只檢索給定範圍的行,使用乙個索引來選擇行,key列顯示使用了哪個索引,一般就是在你的where語句**現between、< 、>、in等的查詢,這種範圍掃瞄索引比全表掃瞄要好,因為它只需要開始於索引的某一點,而結束於另一點,不用掃瞄全部索引。
indexfull index scan,index與all區別為index型別只遍歷索引樹。這通常比all快,因為索引檔案通常比資料檔案小。(也就是說雖然all和index都是讀全表,但index是從索引中讀取的,而all是從硬碟讀取的)
allfull table scan 將遍歷全表以找到匹配的行
using filesort說明mysql會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取。mysql中無法利用索引完成的排序操作稱為「檔案排序」。
using temporary使用了用臨時表儲存中間結果,mysql在對查詢結果排序時使用臨時表。常見於排序order by和分組查詢group by。
using index表示相應的select操作中使用了覆蓋索引(covering index),避免訪問了表的資料行,效率不錯。如果同時出現using where,表明索引被用來執行索引鍵值的查詢;如果沒有同時出現using where,表明索引用來讀取資料而非執行查詢動作。
using where表明使用了where過濾
distinct優化distinct操作,在找到第一匹配的元組後即停止找同樣值的動作
Mysql Explain用法詳解
4.explain select type 資料讀取操作的操作型別 5.table 6.type 7.possible keys和key 8.key len 9.ref 10.rows 11.extra 使用方式 explain sql語句 這裡的id不是主鍵,它是一組數字12345這種,表示我們進...
MySql explain用法及實踐
explain對我們優化sql語句是非常有幫助的。可以通過explain sql語句的方式分析當前sql語句。顯示這一行資料屬於哪張表,若在查詢中為select起了別名,則顯示別名。temp where id 11789 type 在表裡查到結果所用的方式。包括 效能有差 高 all index r...
mysql explain用法和結果的含義
詳細可參考 explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。使用方法,在select語句前加上explain就可以了 如 explain select surname,first name form a,b where a.i...