查看explain 的具體解釋和創建索引的建議

id:表的讀取順序
select_type:表示查詢的型別,
table:輸出結果集的表
type:表示表的連接型別
possible_keys:表示查詢時,可能使用的索引
key:表示實際使用的索引
key_len:索引欄位的長度
ref:列與索引的比較
rows:掃描出的行數(估算的行數)
Extra:執行情況的描述和說明
CREATE TABLE testidx (
id bigint(20) NOT NULL AUTO_INCREMENT,
a bigint(11) DEFAULT NULL,
b varchar(100) NOT NULL,
c varchar(100) NOT NULL,
d varchar(100) NOT NULL,
PRIMARY KEY (id),
KEY idx_a (a),
KEY idx_b (b),
KEY idx_bc (b,c),
KEY idx_abc (a,b,c)
)
- Type欄位
解
讀:
對表訪問方式,表示MySQL在表中找到所需行的方式,又稱“訪問型別”,
常用的型別有: ALL、index、range、 ref、eq_ref、const、system、NULL(從左到右,性能從差到好)
ALL:Full Table Scan, MySQL將遍歷全表以找到匹配的行
index: Full Index Scan,index與ALL區別為index型別只遍歷索引樹
range:只檢索給定范圍的行,使用一個索引來選擇行
ref: 表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值
eq_ref: 類似ref,區別就在使用的索引是唯一索引,對于每個索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連接中使用primary key或者 unique key作為關聯條件
const、system: 當MySQL對查詢某部分進行優化,并轉換為一個常量時,使用這些型別訪問,如將主鍵置于where串列中,MySQL就能將該查詢轉換為一個常量,system是const型別的特例,當查詢的表只有一行的情況下,使用system
NULL: MySQL在優化程序中分解陳述句,執行時甚至不用訪問表或索引,例如從一個索引列里選取最小值可以通過單獨索引查找完成,
ref

range

index

2. possible_keys 與key欄位解讀:
possible_keys
指出MySQL能使用哪個索引,但不一定被查詢使用(該查詢可以利用的索引,如果沒有任何索引顯示 null)
Key
key列顯示MySQL實際決定使用的鍵(索引),必然包含在possible_keys中
要想強制MySQL使用或忽視possible_keys列中的索引,在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX,

3. key_len欄位解讀:
表示索引中所使用的位元組數,可通過該列計算查詢中使用的索引長度,對于utf8字符集存盤的表,每個字符占用3個位元組,
通過key_len可以知道復合索引都使用了哪些欄位.key_len的計算上:
當欄位定義可以為空時,需要額外的1個位元組來記錄它是否為空,當欄位定義為not null時,這額外的1個位元組是不需要的.
當欄位定義為變長資料型別(比如說varchar)時,需要額外的2個位元組來記錄它的長度; 當欄位定義為定長資料型別(比如說int,char,datetime等),這額外的2個位元組是不需要的.

備注:varchar(100)資料占用300位元組,另外加2位元組表示欄位長度
- Extra欄位解讀:
Using where:在查找使用索引的情況下,需要回表去查詢所需的資料
using index & using where:查找使用了索引,但是需要的資料都在索引列中能找到,所以不需要回表查詢資料
using index condition:查找使用了索引,需要回表查詢資料. 條件下推是在mysqlV5.6版本后出現的特性,在二級索引中對行直接過濾,可以減少引擎層與sever層的互動,


- Extra欄位解讀:
Using temporary:表示MySQL需要使用臨時表來存盤結果集,常見于排序和分組查詢,常見 group by ; order by
Using filesort:當Query中包含 order by、grpup by 等排序操作,而且無法利用索引完成的排序操作稱為“檔案排序”,
“The truth is, filesort is badly named. Anytime a sort can’t be performed from an index, it’s a filesort. It has nothing to do with files. Filesort should be called “sort.” It is quicksort at heart.”


創建索引的原則
1.對大表在那些列上創建索引
出現在Where子句中的欄位
與其他表進行連接的欄位
在需要排序的欄位(order by 或者 group by )
2.Bad case:
在不需要的欄位上創建索引
重復的創建索引
在選擇性低的列創建索引,并將其放在索引的首位
過多的索引(例如超過7個)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/175878.html
標籤:其他
上一篇:2006-京淘Day13
