[mysql]explain语句中的key_len计算
来源:互联网 发布:俄语翻译软件 编辑:程序博客网 时间:2024/04/28 18:30
有时候表中有联合索引时,我们想确定我们的sql使用了几个索引字段,这时候就可以用explain查看该sql的key_len,然后通过key_len的值来判断该sql使用了几个索引字段。
假设有如下表:
CREATE TABLE `tblGameRemain` ( `id` int(11) not null auto_increment primary key, `RecDate` date NOT NULL DEFAULT '0000-00-00', `Device` varchar(10), `Area` varchar(10) NOT NULL DEFAULT '', `Platform` varchar(20) NOT NULL DEFAULT '', `GameSrc` varchar(10) NOT NULL DEFAULT '', `SID` varchar(10) NOT NULL DEFAULT '', `KPI` varchar(50) NOT NULL DEFAULT '', `KPIValue` int(11) NOT NULL DEFAULT '0', `Remain` int(11) NOT NULL DEFAULT '0', UNIQUE KEY(`RecDate`,`Device`,`Area`,`Platform`,`GameSrc`,`SID`,`KPI`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
如果我们想知道如下sql中的SID是否使用了索引:
select * from tblGameInfo where RecDate='2015-11-11' and Device='cn' and SID='S1';
我们可以用explain,然后通过返回的key_len来判断
explain select * from tblGameInfo where RecDate='2015-11-11' and Device='cn' and SID='S1';
执行后发现,key_len的值为36。那么,key_len的值是怎么算的呢?
它的规则如下:
- 所有的索引字段,如果没有设置not null,则需要加一个字节。
- 定长字段,int占四个字节、date占三个字节、char(n)占n个字符。
- 对于变成字段varchar(n),则有n个字符+两个字节。
- 不同的字符集,一个字符占用的字节数不同。latin1编码的,一个字符占用一个字节,gbk编码的,一个字符占用两个字节,utf8编码的,一个字符占用三个字节。
我们再看一下上述的sql,根据联合索引的最左匹配原则,所以,如果SID使用了索引,那么RecDate和Device也一定使用了。首先是RecDate,由于它是date型的,而且加上了not null所以key_len为3。其次是Device,由于它是varchar(10),但是没有加上not null,而且是utf8编码的,所以它的key_len=10 * 3 + 2 + 1 = 33,所以RecDate和Device这两个字段就占用了3 + 33 = 36个字节,而且explain中的key_len=36,所以可以判断SID没有使用索引。
(注:本文主要是想说明key_len的计算,如果想判断上述sql的SID是否使用索引,更加最左匹配原则就可以知道答案)
1 0
- [mysql]explain语句中的key_len计算
- [mysql]explain语句中的key_len计算
- explain语句中的key_len计算
- mysql explain 中key_len的计算
- mysql explain 中key_len的计算
- mysql explain 中key_len的计算
- Mysql explain中key_len的计算
- mysql explain 中key_len的计算
- explain之key_len计算
- explain之key_len计算
- explain中的key_len
- mysql explain中key_len值的说明
- MySQL执行计划explain的key_len解析
- mysql explain中key_len的计算方法
- mysql explain中key_len的作用
- 解读EXPLAIN执行计划中的key_len
- 解读EXPLAIN执行计划中的key_len
- MySQL key_len 大小的计算
- 九度OJ 1341:艾薇儿的演唱会 (最短路)
- UI根视图控制器
- android中的Application
- java和C#访问数据库字段空值
- java中为什么要实现序列化,什么时候实现序列化?
- [mysql]explain语句中的key_len计算
- ImageNet Classification with Deep Convolutional Neural Network解读
- HDU 5523 Game
- Struts2-----Ognl表达式语言
- 笔记七(随机运动)
- 一个优化算例的脚本代码
- 九度OJ 1342:寻找最长合法括号序列II (DP)
- Android-UI布局---RecyclerView学习(二)利用它做的相册集效果
- leetcode 52:Maximum Subarray