mysql的explain关键字ken_len列
生活随笔
收集整理的這篇文章主要介紹了
mysql的explain关键字ken_len列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
mysql的explain關鍵字執行結果中有一個ken_len列,其值表示這個SQL在執行用到的索引列的長度,在使用聯合索引(多列)時用于判斷使用了哪些索引列。
常用類型計算規則如下:
- char(n)類型,其長度為3n字節
- varchar(n)類型,其長度為3n+2字節,這個2用于存儲字符串的長度
- tinyint(n)類型,其長度為1字節
- smallint(n)類型,其長度為2字節
- int(n)類型,其長度為4字節
- bigint(n)類型,其長度為8字節
- time類型,其長度為3字節
- date類型,其長度為3字節
- timestamp類型,其長度為4字節
- datetime類型,其長度為8字節
另外:如果其值可為null,則需要額外一個字節。
如下為建表的DDL語句:
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;單列索引
現在我們使用主鍵列做篩選條件執行一個SQL執行計劃:
explain select * FROM user where id=1結果如下:
?我們的user表是給id列建了主鍵索引、int類型自增的,用id進行=查詢,可以看到使用了主鍵索引,ken_len列的值為4,在mysql中,int類型占4個字節空間,所以這里為4。
復合索引
現在我們使用復合索引列執行一個SQL執行計劃:
explain select * FROM user where name='a' and age = 12 and sex=1;執行結果如下:
?
?我們可以看到ken_len列值為306,由于我們建的是name、age、sex三列的復合索引,查詢條件又是這三列,所以結果應該是name:3*100+2,age:4,sex:3+1(sex可null),其和應該為310,但由于sex為char類型,我們給的是1為int類型,所以sex列沒用索引,所以這里為306,從這也可以看出如果給的值和列類型不匹配,不會走索引。
總結
以上是生活随笔為你收集整理的mysql的explain关键字ken_len列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZOJ 3886 Nico Number
- 下一篇: 突变测试_什么是突变测试?