MySql Explain欄位決議

id
id串列示select的序號,查詢Sql中有幾個select就會有幾個id,
id的值越大,該查詢的優先級超高,
select_type
查詢型別,Mysql的查詢型別有:簡單查詢、復雜查詢
- SIMPLE(簡單查詢)
- PRIMARY(復雜查詢的最外層查詢)
- SUBQUERY(復雜查詢的子查詢,出現在select或者where的子句中),
- DERIVED(復雜查詢的FROM子句中的查詢標記為DERIVED,MySql會將結果放在一個臨時表中、也稱為派生表)
- UNION(復雜查詢中出現在UNION后面的查詢標記為UNION)
table:
表示該查詢的訪問的是哪個表,可以是具體的表名,也可以是派生表
partitions:
磁區表會用上,使用極少,具體用法自行百度
type:
查詢的型別,查詢效率從高到低為
- NULL:表示在優化階段就可以分解陳述句,此時在執行分段都不需要掃描表和索引,直接就可以拿到結果,如:查詢主鍵id的最小值(select min(id) from table ),這里不需要掃描就可以從索引中直接拿到第一個id就是最小id
- system/const: 表示在優化階段可以直接優化為常量,比如:select * from table where id =3 這個查詢可以優化為 select 3 as id , name,... from table where id =3 ,這時id列的值其實已經確定了
- eq_ref:表示使用了唯一索引或者主鍵索引時,如:select * from table where id =1 ,因為id是主鍵索引,已經可以確定結果就只可能最多為一個資料,
- ref:表示使用了某個索引與一個具體的值比較,如:select * from table where name='tom' 這時不能確定結果的數量,但是這種查詢可以掃描索引來得到結果,且結果在索引中一定是連續的
- rang:表示使用索引時是一個范圍掃描,select * from table where id > 100 or id<5 ,這里就需要對索引進行范圍掃描,
- index:索引掃描,直接掃描一個二級索引拿到結果,一般為覆寫索引查詢,
- all:全表掃描
possible_keys:可能使用上的索引列,或者說可以使用上的索引
key:查詢實際使用的索引列,當key中出現了一個索引,但是沒有在possible_keys中出現,這可能是因為使用了聚簇索引
key_len:
使用索引長度,比如有個聯合索引時,可能不會使用到聯合索引的全部欄位,只有上了前幾個,這時就可以根據key_len欄位來計算出到底使用了幾個欄位,

ref:
表示在查詢中與key列索引作比較所使用的值是什么型別
- const: 表示使用的是常量
- table.id: 表示使用的是表的id欄位
rows:
查詢所需要讀取資料的行數
filtered:
Mysql5.1加入,表示的是針對 表里符合某個條件的記錄數百分比(悲觀計算),如果你把rows列和這個百分比相乘,就可以大概計算出這個查詢的結果行數
Extra:
額外資訊
- using index : 表示使用了覆寫索引
- using where:表示儲存引擎會把結果回傳的Mysql查詢服務器,然后使用where條件進行過濾
- using temporary: 表示對查詢結果進行排序或者去重等操作時使用了臨時表
- using filesort:表示對查詢結果排序時使用了外部檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/457579.html
標籤:MySQL
上一篇:并發事務問題與事務隔離級別
