MySQL explain 中key len的計算

2022-05-07 03:09:08 字數 1208 閱讀 7574

key_len表示索引使用的位元組數,根據這個值可以判斷索引的使用情況,特別是在組合索引的時候,判斷該索引有多少部分被使用到非常重要。

在計算key_len時,下面是一些需要考慮的點:

索引欄位的附加資訊:

1.可以分為變長和定長資料型別討論;

2.當索引欄位為定長資料型別時,如char,int,datetime,需要有是否為空的標記,這個標記占用乙個位元組(對於not null來說不需要這乙個位元組);

3.當索引欄位為變長資料型別時,如varchar,除了是否為空的標記外,還需要有長度資訊,需要占用兩個位元組;

4.對於char,varchar,blob,text等,key_len的長度還和字符集有關,latin1 乙個字元占用乙個位元組,gbk 乙個字元占用兩個位元組,utf8 乙個字元占用三個位元組

例如:列型別

key_len

備註

id int

key_len = 4+1

int為4bytes,允許為null,加1byte

id bigint not null

key_len=8

bigint為8bytes

user char(30) utf8

key_len=30*3+1

utf8每個字元為3bytes,允許為null,加1byte

user varchar(30) not null utf8

key_len=30*3+2

utf8每個字元為3bytes,變長資料型別,加2bytes

user varchar(30) utf8

key_len=30*3+2+1

utf8每個字元為3bytes,允許為null,加1byte,變長資料型別,加2bytes

detail text(10) utf8

key_len=30*3+2+1

text擷取部分,被視為動態列型別

備註:key_len只表示了where中用於條件過濾時被選中的索引列,是不包含order by / group by 這一部分被選中的索引列的。

例如:有乙個聯合索引idx(a1,b2,c3),三列均是 int not null,那麼下面的執行計畫中key_len的值是8,不是12

select .... from table where c1=? and c2=? order by c1;

Mysql explain中key len的計算

轉 人生不過如此 今天丁原問我mysql執行計畫中的key len是怎麼計算得到的,當時還沒有注意,在高效能的那本書講到過這個值的計算,但是自己看執行計畫的時候一直都沒有太在意這個值,更不用說深討這個值的計算了 ken len表示索引使用的位元組數,根據這個值,就可以判斷索引使用情況,特別是在組合索...

mysql explain 中key len的計算

今天丁原問我mysql執行計畫中的key len是怎麼計算得到的,當時還沒有注意,在高效能的那本書講到過這個值的計算,但是自己看執行計畫的時候一直都沒有太在意這個值,更不用說深討這個值的計算了 ken len表示索引使用的位元組數,根據這個值,就可以判斷索引使用情況,特別是在組合索引的時候,判斷所有...

mysql explain欄位說明

explain列的解釋 id 查詢的序列號 select type select查詢的型別,主要是區別普通查詢和聯合查詢 子查詢之類的複雜查詢。table 所訪問的資料庫中表的名稱。type 這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const eq reg ref range ...