[MySQL] 利用explain查看sql语句中使用的哪个索引
时间:2022-07-25
本文章向大家介绍[MySQL] 利用explain查看sql语句中使用的哪个索引,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
字段类型是: `enterpriseId` int(10) unsigned DEFAULT NULL, `email` char(255) NOT NULL DEFAULT '', 表的索引是: UNIQUE KEY `emailent` (`email`,`enterpriseId`), KEY `edf` (`enterpriseId`,`departId`,`flag`),
有这么两条sql语句,分别表现是:
explain select email from email where enterpriseId=23684 and (email like 'aaa%');
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| 1 | SIMPLE | email | ref | emailent,edf | edf | 5 | const | 6 | Using where |
看到key_len的长度是5 ,可以知道使用的是edf这个索引 , 因为edf索引中的enterpriseId是int类型4个字节 ,默认null 加1个字节,总共5个字节 也就是先使用enterpriseId查到索引,在索引中使用where过滤数据
explain select email from email where enterpriseId=23684 and (email like 'aaas%');
+----+-------------+-------+-------+---------------+----------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+----------+---------+------+------+--------------------------+
| 1 | SIMPLE | email | range | emailent,edf | emailent | 770 | NULL | 2 | Using where; Using index |
+----+-------------+-------+-------+---------------+----------+---------+------+------+--------------------------+
在like的时候比上面多了一个字符,这个时候的索引情况是key_len是770,可以知道使用的是emailent这个索引,因为这个的索引长度是 255*3+5=770 varchar是255个字符,utf8下是*3, 加上int 5个字节
like两边都有%的情况,只会使用第一个条件的edf索引
mysql> explain select * from email where enterpriseId=23684 and (email like '%shihanasas%');
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| 1 | SIMPLE | email | ref | edf | edf | 5 | const | 6 | Using where |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
- HTTP-FLV直播初探
- BZOJ1058: [ZJOI2007]报表统计
- React数据流和组件间的通信总结
- react+redux+webpack教程4
- 洛谷P2391 白雪皑皑(并查集)
- BZOJ4514: [Sdoi2016]数字配对(费用流)
- 3.2数据结构之指针和链表 1748:约瑟夫问题
- 2017值得一瞥的JavaScript相关技术趋势
- 1.5编程基础之循环控制44:第n小的质数
- noi 1.8 11图像旋转
- 为什么实现了equals()就必须实现hashCode()?
- 到天宫做客(2017寒假培训测试压轴题)
- 前端--理解 Promise 的工作原理
- 到天宫做客(2017寒假培训测试压轴题)
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- springboot配置之在配置文件中配置debug=true开启自动配置类报告
- java之操作集合的工具类--Collections
- spinrgboot配置之@PropertySource和@ImportResource
- java之泛型
- java之枚举和注解
- java之注解
- 剑指offer(16-18)题解
- java之java.io.File的相关方法
- java之不同数据流应用举例
- java之反射机制
- LeetCode | 21.合并两个有序链表
- java之动态代理设计模式
- 小白如何在博客园上创建一个自己的超美化博客
- Redis | Redis 列表相关命令
- springboot开发之扩展springmvc