前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL索引下推探索

MySQL索引下推探索

作者头像
晓果冻
发布2022-09-08 12:39:53
2530
发布2022-09-08 12:39:53
举报
文章被收录于专栏:一直在努力的Java菜鸡er

MySQL索引下推学习

表结构

代码语言:javascript
复制
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;
索引长度申明
代码语言:javascript
复制
name列202
age列4
position列202
index_union都用到的话大概408
所有的数据都输UUID生成的,45w数据。
案例一(like查询)
代码语言:javascript
复制
在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。
案例二(大于等范围查询)
代码语言:javascript
复制
由图可知,虽然也用到了index_union索引,但是key_len长度只有202,索引使用不充分,只有name列参与了索引,按照案例一来说
like和>都是找的范围数据,应该也可以充分使用该索引的。只能猜测大于这样的范围查询在mysql底层就不让后续的条件参与索引。
联合索引第一个字段用范围
代码语言:javascript
复制
这种情况不一定,看范围查找的数据在全部数据中所占的比例,还是用explain分析保险。
强行用索引,牵扯到回表,mysql认为不如直接在主键索引树扫描,效率可能还高点。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL索引下推学习
    • 索引长度申明
      • 案例一(like查询)
        • 案例二(大于等范围查询)
          • 联合索引第一个字段用范围
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档