[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 |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+

 

posted @   唯一客服系统开发笔记  阅读(724)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2018-09-14 [PHP] 算法-二位有序数组中查找的PHP实现
点击右上角即可分享
微信分享提示
1
chat with us