mysql中索引利用情況(explain用法)


 

4、使用explain查詢,查看索引使用情況(這里還可以進行多次其他sql語句的查詢,查看索引利用情況)

從上面可以看到key_len使用的長度為38(字節),那么總的索引長度是多少呢?

下面繼續對表的創建進行查看,查看各個字段的大小

其中:

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,所以推論只用到了組合索引的一部分。

 

5、下面是對explain其他的參數進行說明:

table:

這是表的名字。

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM