explain 中ken_len作用
explain 中key_len的作用
key_len越小 索引效果越好!
key_len的長(zhǎng)度是如何計(jì)算的?
name的字段類(lèi)型是varchar(20),字符編碼是utf8,一個(gè)字符占用3個(gè)字節(jié),那么key_len應(yīng)該是 20*3=60。
key_len的長(zhǎng)度計(jì)算公式:
varchr(10)變長(zhǎng)字段且允許NULL = 10 * ( character set:utf8=3,gbk=2,latin1=1)+1(NULL)+2(變長(zhǎng)字段)
varchr(10)變長(zhǎng)字段且不允許NULL = 10 *( character set:utf8=3,gbk=2,latin1=1)+2(變長(zhǎng)字段)
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的長(zhǎng)度是8bytes
int key_len長(zhǎng)度是4 ,typeint的長(zhǎng)度是1
smallint 長(zhǎng)度是2 middleint長(zhǎng)度是3
在這里 key_len 大小的計(jì)算規(guī)則是:
a、一般地,key_len 等于索引列類(lèi)型字節(jié)長(zhǎng)度,例如int類(lèi)型為4-bytes,bigint為8 bytes;
b、如果是字符串類(lèi)型,還需要同時(shí)考慮字符集因素,例如:CHAR(30) UTF8則key_len至少是90 bytes;
c、若該列類(lèi)型定義時(shí)允許NULL,其key_len還需要再加 1 bytes;
d、若該列類(lèi)型為變長(zhǎng)類(lèi)型,例如 VARCHAR(TEXT\BLOB不允許整列創(chuàng)建索引,如果創(chuàng)建部分索引,也被視為動(dòng)態(tài)列類(lèi)型),其key_len還需要再加 2 bytes
舉例說(shuō)明
例如,有個(gè)聯(lián)合索引 idx1(c1, c2, c3),3個(gè)列均是INT NOT NULL,那么下面的這個(gè)SQL執(zhí)行計(jì)劃中,key_len的值是8而不是12:
SELECT…WHERE c1=? AND c2=? ORDER BY c1;
這句話的意思是: 沒(méi)有使用完全索引
通過(guò)這個(gè)案例,就可以知道 有沒(méi)有完全使用索引。
總結(jié)
以上是生活随笔為你收集整理的explain 中ken_len作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 显示器的 VGA、HDMI、DVI 和D
- 下一篇: 读《双螺旋》