mysql的explain关键字ken_len列
mysql的explain關(guān)鍵字執(zhí)行結(jié)果中有一個(gè)ken_len列,其值表示這個(gè)SQL在執(zhí)行用到的索引列的長(zhǎng)度,在使用聯(lián)合索引(多列)時(shí)用于判斷使用了哪些索引列。
常用類型計(jì)算規(guī)則如下:
- char(n)類型,其長(zhǎng)度為3n字節(jié)
- varchar(n)類型,其長(zhǎng)度為3n+2字節(jié),這個(gè)2用于存儲(chǔ)字符串的長(zhǎng)度
- tinyint(n)類型,其長(zhǎng)度為1字節(jié)
- smallint(n)類型,其長(zhǎng)度為2字節(jié)
- int(n)類型,其長(zhǎng)度為4字節(jié)
- bigint(n)類型,其長(zhǎng)度為8字節(jié)
- time類型,其長(zhǎng)度為3字節(jié)
- date類型,其長(zhǎng)度為3字節(jié)
- timestamp類型,其長(zhǎng)度為4字節(jié)
- datetime類型,其長(zhǎng)度為8字節(jié)
另外:如果其值可為null,則需要額外一個(gè)字節(jié)。
如下為建表的DDL語(yǔ)句:
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(100) NOT NULL COMMENT '名字',`age` int(3) NOT NULL COMMENT '年齡',`sex` char(1) DEFAULT NULL COMMENT '性別',PRIMARY KEY (`id`) USING BTREE,KEY `idx_name_age_sex` (`name`,`age`,`sex`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;單列索引
現(xiàn)在我們使用主鍵列做篩選條件執(zhí)行一個(gè)SQL執(zhí)行計(jì)劃:
explain select * FROM user where id=1結(jié)果如下:
?我們的user表是給id列建了主鍵索引、int類型自增的,用id進(jìn)行=查詢,可以看到使用了主鍵索引,ken_len列的值為4,在mysql中,int類型占4個(gè)字節(jié)空間,所以這里為4。
復(fù)合索引
現(xiàn)在我們使用復(fù)合索引列執(zhí)行一個(gè)SQL執(zhí)行計(jì)劃:
explain select * FROM user where name='a' and age = 12 and sex=1;執(zhí)行結(jié)果如下:
?
?我們可以看到ken_len列值為306,由于我們建的是name、age、sex三列的復(fù)合索引,查詢條件又是這三列,所以結(jié)果應(yīng)該是name:3*100+2,age:4,sex:3+1(sex可null),其和應(yīng)該為310,但由于sex為char類型,我們給的是1為int類型,所以sex列沒(méi)用索引,所以這里為306,從這也可以看出如果給的值和列類型不匹配,不會(huì)走索引。
總結(jié)
以上是生活随笔為你收集整理的mysql的explain关键字ken_len列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ZOJ 3886 Nico Number
- 下一篇: 突变检测软件 测试数据库,突变测试—通过