大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说[MySQL] mysql索引的长度计算和联合索引「建议收藏」,希望您对编程的造诣更进一步.
1.所有的索引字段,如果没有设置not null,则需要加一个字节。
2.定长字段,int占4个字节、date占3个字节、char(n)占n个字符。
3.变长字段,varchar(n),则有n个字符+两个字节。
4.不同的字符集,一个字符占用的字节数不同。latin1编码的,一个字符占用1个字节,gbk编码的,一个字符占用2个字节,utf8编码的,一个字符占用3个字节。 utf8mb4是一个字符占4个字节
5.使用explain语句查询到的key_len字段,可以适用于上面的计算规则,可以看到查询是否使用到了联合索引
6.mysql优化器会对条件中的 and的前后顺序根据多列索引顺序自动纠正过来
通过索引的长度查看下面sql语句是否使用到了索引
CREATE TABLE `index_test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT “”,
`gid` int(11) NOT NULL DEFAULT “0”,
`age` int(11) NOT NULL DEFAULT “0”,
`score` int(10) unsigned NOT NULL DEFAULT “0”,
PRIMARY KEY (`id`),
KEY `name_gid_age_index` (`name`,`gid`,`age`),
KEY `score_index` (`score`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
insert into index_test values(null,”taoshihan”,2,1,0);
insert into index_test values(null,”taoshihan”,2,2,0);
insert into index_test values(null,”taoshihan”,2,3,0);
explain select * from index_test where name=”taoshihan” group by gid;
+—-+————-+————+————+——-+——————–+——————–+———+——+——+———-+————-+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+—-+————-+————+————+——-+——————–+——————–+———+——+——+———-+————-+
| 1 | SIMPLE | index_test | NULL | index | name_gid_age_index | name_gid_age_index | 310 | NULL | 6 | 66.67 | Using where |
+—-+————-+————+————+——-+——————–+——————–+———+——+——+———-+————-+
key_len的长度是310,也就是100*3+2 + 4 +4
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10001.html