key_len表示索引使用的字節數,根據這個值可以判斷索引的使用情況,特別是在組合索引的時候,判斷該索引有多少部分被使用到非常重要。
在計算key_len時,下面是一些需要考慮的點:
索引字段的附加信息:
- 可以分為變長和定長數據類型討論;
- 當索引字段為定長數據類型時,如char,int,datetime,需要有是否為空的標記,這個標記占用1個字節(對於not null來說不需要這1個字節);
- 當索引字段為變長數據類型時,如varchar,除了是否為空的標記外,還需要有長度信息,需要占用2個字節;
- 對於char,varchar,blob,text等,key_len的長度還和字符集有關,latin1 一個字符占用1個字節,gbk 一個字符占用2個字節,utf8 一個字符占用3個字節.
key_len的長度計算公式(key_len越小 索引效果越好):
varchr(10)變長字段且允許NULL = 10 * ( character set:utf8=3,gbk=2,latin1=1)+1(NULL)+2(變長字段)
varchr(10)變長字段且不允許NULL = 10 *( character set:utf8=3,gbk=2,latin1=1)+2(變長字段)
char(10)固定字段且允許NULL = 10 * ( character set:utf8=3,gbk=2,latin1=1)+1(NULL)
char(10)固定字段且不允許NULL = 10 * ( character set:utf8=3,gbk=2,latin1=1)
此外:
bigint的長度是8 字節
int 的長度是4 字節
typeint的長度是1 字節
smallint 長度是2 字節
middleint長度是3 字節