mysql 分析索引效率

2021-06-15 20:50:38 字數 1515 閱讀 8841

分析索引效率

現在我們已經知道了一些如何選擇索引列的知識,但還無法判斷哪乙個最有效。mysql提供了乙個內建的sql命令幫助我們完成這個任務,這就是explain命令。explain命令的一般語法是:explain

explain select peopleid from people where firstname='mike' and lastname='sullivan' 

and age='17';

這個命令將返回下面這種分析結果:

table

type

possible_keys

key

key_len

ref

rows

extra

people

reffname_lname_age

fname_lname_age

102const,const,const

1where used

下面我們就來看看這個explain分析結果的含義。

table:這是表的名字。

type:連線操作的型別。下面是mysql文件關於ref連線型別的說明:

「對 於每一種與另乙個表中記錄的組合,mysql將從當前的表讀取所有帶有匹配索引值的記錄。如果連線操作只使用鍵的最左字首,或者如果鍵不是unique或 primary key型別(換句話說,如果連線操作不能根據鍵值選擇出唯一行),則mysql使用ref連線型別。如果連線操作所用的鍵只匹配少量的記錄,則ref是一 種好的連線型別。」

在本例中,由於索引不是unique型別,ref是我們能夠得到的最好連線型別。

如果explain顯示連線型別是「all」,而且你並不想從表裡面選擇出大多數記錄,那麼mysql的操作效率將非常低,因為它要掃瞄整個表。你可以加入更多的索引來解決這個問題。預知更多資訊,請參見mysql的手冊說明。

possible_keys:

可能可以利用的索引的名字。這裡的索引名字是建立索引時指定的索引暱稱;如果索引沒有暱稱,則預設顯示的是索引中第乙個列的名字(在本例中,它是「firstname」)。預設索引名字的含義往往不是很明顯。

key:

它顯示了mysql實際使用的索引的名字。如果它為空(或null),則mysql不使用索引。

key_len:

索引中被使用部分的長度,以位元組計。在本例中,key_len是102,其中firstname佔50位元組,lastname佔50位元組,age佔2位元組。如果mysql只使用索引中的firstname部分,則key_len將是50。

ref:

它顯示的是列的名字(或單詞「const」),mysql將根據這些列來選擇行。在本例中,mysql根據三個常量選擇行。

rows:

mysql所認為的它在找到正確的結果之前必須掃瞄的記錄數。顯然,這裡最理想的數字就是1。

extra:

這裡可能出現許多不同的選項,其中大多數將對查詢產生負面影響。在本例中,mysql只是提醒我們它將用where子句限制搜尋結果集。

MySQL索引分析

最近學習mysql索引,總結的了一些東西,若有不對之處,歡迎指正。1.最左匹配,如果乙個索引包含多列,在查詢時,如果第一列沒有出現在此索引中,則此查詢不會使用此索引。分析 假設乙個學生的表的索引是 index1 name,age,gender 索引結構如下 語句1 select from stude...

MySQl 索引分析

前序 索引有多種型別,其中包括主鍵索引 唯一索引 b tree索引 聚集索引和非聚集索引 雜湊索引等等,下面主要深入了解一下b tree索引。b tree介紹 mysql是由b tree構成的,下面先來介紹一下什麼是b tree。b tree是為磁碟或者其他直接訪問輔助裝置而設計的一種平衡二叉樹。這...

sql server效能分析 索引使用效率評估

使用很少的索引排在最先 declare dbid int select dbid db id select objectname object name s.object id s.object id,indexname i.name,i.index id user seeks,user scans...