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

2021-08-06 00:21:55 字數 2558 閱讀 8044

使用explain檢視,如下

1、首先建立表test,語句如下

[sql]view plain

copy

create

table

test(a 

int,b 

varchar

(10),c 

varchar

(10));  

2、在表中的a,b都建立索引,先後順序是a,b

[sql]view plain

copy

create

index

idx_a_b 

ontest(a,b);  

3、分別往裡面插入三條資料,插入後結果如下:

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值的解釋

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。

聯合索引ABC的幾種索引利用情況

對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。以下是一些例子 1 select ...

mysql表關聯中的索引使用情況

2015 12 22 17 47 874人閱讀收藏 舉報 mysql知識庫 mysq優化 26 作者同類文章x mysql在某些情況下可以自動優化表關聯的關聯條件,如 通過分析條件中的字段是否有索引,關聯表中的資料總數之類,通過這些條件mysql便可以實現一些自動優化sql語句的功能。以下幾種情況基...

Mysql 聯合索引使用情況測試

建立索引 是表名 a,b,c是建立索引的欄位名 alter table add index sindex a b c 情況一 使用單條件查詢時,索引使用情況如下 只會用到 a 的索引 type ref,key sindex,key len 163,ref const select from wher...