MySQL索引下推探索
2023-06-13 09:12:13 时间
MySQL
索引下推学习
表结构
CREATE TABLE `demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '姓名',
`age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
`position` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '职位',
`card_num` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '工卡号',
PRIMARY KEY (`id`),
KEY `index_union` (`name`,`age`,`position`)
) ENGINE=InnoDB AUTO_INCREMENT=450001 DEFAULT CHARSET=utf8;
索引长度申明
name列202
age列4
position列202
index_union都用到的话大概408
所有的数据都输UUID生成的,45w数据。
案例一(like查询)
在mysql5.6之前,name like 'xxx%' 查询出结果集首先拿着这部分集,去主键索引树回表,在主键索引树找到这些结果集
再在这些结果集中查name和position。所以如图二展示,mysql通过name like '王五%'找到红色部分的结果集,同时也可
以得到绿色部分的主键结果集去下面的主键索引树中找到整行数据,在蓝色部分的结果集中通过age和position筛选出合适的结
果集:紫色所圈住的部分。
在mysql5.6之后,name like 'xxx%' 查询出结果集后,现在结果集中搜寻满足age和position的结果集,这样发筛选
出的结果集就相对之前的结果集小很多。回表时查询的主键id也少。如图三展示,mysql通过name like '王五%'找到红色部分1的
结果集,此时先不拿id结果集直接去回表,会在1的结果集直接筛选满足age结果集2,在拿着满足position的结果集3,然后拿着合
适的主键id集去主键索引树去回表,得到结果集4。
案例二(大于等范围查询)
由图可知,虽然也用到了index_union索引,但是key_len长度只有202,索引使用不充分,只有name列参与了索引,按照案例一来说
like和>都是找的范围数据,应该也可以充分使用该索引的。只能猜测大于这样的范围查询在mysql底层就不让后续的条件参与索引。
联合索引第一个字段用范围
这种情况不一定,看范围查找的数据在全部数据中所占的比例,还是用explain分析保险。
强行用索引,牵扯到回表,mysql认为不如直接在主键索引树扫描,效率可能还高点。
相关文章
- MySQL索引和主键:提升查询性能的利器(mysql索引主键)
- MySQL树形结构:深入探索(mysql树形结构)
- 什么MySQL实现快速检索:索引添加命令(mysql添加索引命令是)
- 什么MySQL添加索引命令:明智之举(mysql添加索引命令是)
- 索引深入Mysql:删除唯一索引的技巧(mysql删除唯一)
- MySQL集群:探索高可用性解决方案(mysql集群问题)
- 重新安装:Linux系统完全卸载MySQL(linux完全卸载mysql)
- 探索MySQL中如何使用苹果表情(mysql苹果表情)
- MySQL索引最大长度:768字节限制(mysql索引最大长度)
- MySQL中建立树形索引实践(mysql树索引)
- MySQL触发器:视频教程精选(mysql触发器视频)
- MySQL开发带来的安卓新体验(mysql开发安卓)
- 深入探索MySQL数据日志分析(mysql数据日志分析)
- 如何在MySQL中查找注册表的位置(mysql注册表位置)
- MySQL经典图书推荐(mysql经典书籍)
- MySQL快速索引:提升表性能的利器(mysql给表添加索引)
- 基于H2和MySQL的数据库技术探索(h2和mysql)
- MySQL如何修改字符编码(mysql中修改字符编码)
- MySQL中如何处理中文数据(mysql中使用中文)
- MySQL文件的用途及作用简介(mysql个文件的作用)
- ASP无法连接MySQL数据库问题解决方案(asp不能连接mysql)
- 解决MySQL用CMD命令行卸载的方法(cmd卸载mysql命令)
- MySQL注册失败,解决方法汇总(mysql不能注册)