mysql中联合索引的细节问题
2023-09-11 14:17:00 时间
今天早上开早会的时候大家讨论到mysql的优化,其中有一个联合索引是这样的:
理所当然我们这样查询sql:
(SQL_NO_CACHE
:不使用缓存查询数据)
查看该sql的使用情况:
可以看到该sql是使用了联合索引的。
这个时候有一个同事就提出了:如果我把name放在前面还会调用联合索引吗?
于是我们就试了一下:
从结果上来看,将name和id换个位置并不影响索引的使用。
开会结束后,我又陷入了沉思:如果我把id和name单独拉出来呢?
结果显而易见,只用id查询的时候照样使用了联合索引。
当我用name作为查询条件的时候,惊奇的一幕发生了:
他并没有使用联合索引。这个时候我们去查看是怎么定义联合索引的:
可以看到,我们将id放在了前面,所以mysql在使用联合索引的时候并不会单条件匹配后面的字段
。学到了!!!
再来一个问题:如果同时又联合和单个索引,mysql回优先用哪个呢?
结果显示:优先使用单索引:
将email换成name:
结果显示:使用联合索引
由以上可得出结论:优先级:前单索引(条件查询在联合索引第一位的字段)>联合索引>后单索引(条件查询在联合索引第二位的字段)
这就是mysql的最左前缀匹配原则
相关文章
- Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用
- mysql:联合索引及优化
- mysql几种引擎和使用场景
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- Xtrabackup 对MYSQL进行备份还原
- 谈Mysql索引
- Mysql一个非常有用的内置函数今天碰到要把MySQL数据库中的varchar转换成date类型进
- MySQL索引
- mysql where过滤条件中and连接的两个条件的顺序不必和建立的联合索引的字段顺序一致_mysql and 顺序_mysql执行过程以及顺序
- Mysql的select in会自动过滤重复的数据
- mysql聚簇索引的页分裂原理实例分析
- MySQL哈希索引
- Mysql中联合索引的最左匹配原则(百度)
- [转]2006 MySQL server has gone away错误,最大值溢出解决办法 mysql max_allowed_packet 查询和修改
- Atitit postgresql data type 数据类型与mysql对应表 数据库常用数据类型 PostgreMysql 整数intgreterInt 小数numericFL
- MySQL索引优化入门
- MySQL Study之--Mysql无法启动“mysql.host”
- mysql事务级别和spring中应用
- 第45讲:MySQL创建索引时要注意的规则
- mysql 建立联合索引
- Mysql 5.7 故障恢复处理记录
- MySQL使用简单教程
- MySQL索引重点小总结
- MySQL索引的数据结构
- 【安装包】MySQL服务端
- 【MySql】MySQL数据库--什么是MySQL的回表 ?
- 【MySql】MySQL索引15连问(相信大家看完肯定会有帮助)
- MySQL数据库管理系统安装部署——Linux
- Mysql MGR简介与单主模式搭建初体验
- MySQL报错Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50568, now run