四、使用explain查詢,查看索引使用狀況(這裏還能夠進行屢次其餘sql語句的查詢,查看索引利用狀況)mysql
從上面能夠看到key_len使用的長度爲38(字節),那麼總的索引長度是多少呢?sql
下面繼續對錶的建立進行查看,查看各個字段的大小spa
其中:.net
latin1 = 1 byte = 1 character
uft8 = 3 byte = 1 character
gbk = 2 byte = 1 character索引
從上面這些能夠計算索引的長度:文檔
10*3(varchar 10)+3(標記變長)+1(標記可爲null)+其餘(不清楚)
組合索引的長度10*3+11已經大於38,因此推論只用到了組合索引的一部分。get
五、下面是對explain其餘的參數進行說明:it
table:table
這是表的名字。class
type:
鏈接操做的類型。下面是MySQL文檔關於ref鏈接類型的說明:
「對於每一種與另外一個表中記錄的組合,mysql將從當前的表讀取全部帶有匹配索引值的記錄。若是鏈接操做只使用鍵的最左前綴,或者若是鍵不是UNIQUE或PRIMARY KEY類型(換句話說,若是鏈接操做不能根據鍵值選擇出惟一行),則MySQL使用ref鏈接類型。若是鏈接操做所用的鍵只匹配少許的記錄,則ref是一種好的鏈接類型。」
在本例中,因爲索引不是UNIQUE類型,ref是咱們可以獲得的最好鏈接類型。
若是EXPLAIN顯示鏈接類型是「ALL」,並且你並不想從表裏面選擇出大多數記錄,那麼MySQL的操做效率將很是低,由於它要掃描整個表。你能夠加入更多的索引來解決這個問題。預知更多信息,請參見MySQL的手冊說明。
本例子中是rang,下面是對type值的解釋
這是重要的列,顯示鏈接使用了何種類型。從最好到最差的鏈接類型爲const、eq_reg、ref、range、indexhe和ALL
Type:告訴咱們對錶所使用的訪問方式,主要包含以下集中類型;
◇ all:全表掃描
◇ const:讀常量,且最多隻會有一條記錄匹配,因爲是常量,因此實際上只須要讀一次;
◇ eq_ref:最多隻會有一條匹配結果,通常是經過主鍵或者惟一鍵索引來訪問;
◇ fulltext:
◇ index:全索引掃描;
◇ index_merge:查詢中同時使用兩個(或更多)索引,而後對索引結果進行merge 以後再讀
取表數據;
◇ index_subquery:子查詢中的返回結果字段組合是一個索引(或索引組合),但不是一個
主鍵或者惟一索引;
◇ rang:索引範圍掃描;
◇ ref:Join 語句中被驅動表索引引用查詢;
◇ ref_or_null:與ref 的惟一區別就是在使用索引引用查詢以外再增長一個空值的查詢;
◇ system:系統表,表中只有一行數據;
◇ unique_subquery:子查詢中的返回結果字段組合是主鍵或者惟一約束;
possible_keys:
可能能夠利用的索引的名字。這裏的索引名字是建立索引時指定的索引暱稱;若是索引沒有暱稱,則默認顯示的是索引中第一個列的名字(在本例中,它是「firstname」)。默認索引名字的含義每每不是很明顯。
key:
它顯示了MySQL實際使用的索引的名字。若是它爲空(或NULL),則MySQL不使用索引。
key_len:
索引中被使用部分的長度,以字節計
ref:
列出是經過常量(const),仍是某個表的某個字段(若是是join)來過濾(經過key)
的;
rows:
MySQL所認爲的它在找到正確的結果以前必須掃描的記錄數。顯然,這裏最理想的數字就是1。