小心MySQL联合索引的效率陷阱
2023-09-27 14:25:41 时间
场景:
表中有两个索引:索引index_1(create_Time, category_id), index_2(category_id)
查询语句为:select create_time,category_id from table where create_time='15233333333' and category_id='666';
explain结果:
使用了index_2而没有使用index_1
原因:
当一个表有多条索引可走时, Mysql 根据查询语句的成本来选择走哪条索引(选择索引所在列长度小的), 联合索引的话, 它往往按照最左原则计算最左边的一列的大小,那么create_time明显要比category_id长的的多,所以查询构造器默认选择使用index_2,无法使用联合索引,查询效率大大降低。
解决方法:
1、改变联合索引index_1中两列的顺序,第一列使用长度小的 ORCE INDEX (FIELD1)
2、使用hint强制使用index_1:select create_time,category_id from table force index(index_1) where create_time='15233333333' and category_id='666';
相关文章
- mac下完全卸载mysql的方法
- mysql中RAND()随便查询记录效率问题和解决的方法分享
- MySQL 大表如何优化查询效率?
- 解开发者之痛:中国移动MySQL数据库优化最佳实践
- MySQL协议分析2
- MySQL 常见的面试题及其答案
- RDS for MySQL 表上 Metadata Lock 的产生和处理
- 基于Java+MySQL 实现(Web)日程管理系统【100010222】
- 基于Java(SSM框架)+MySQL开发的小型英语学习网站【100010069】
- MySQL 服务器级别的锁等待
- windows 下命令行启动停止mysql
- [PHP]关于如果你的环境是LINUX且恰好你的PHP是7同时你又不是编译的PHP源代码那你的mysql该怎么他妈链接这件事?
- MySQL基础之 支持的数据类型
- mysql 实战 or、in与union all 的查询效率
- MySQL大表拆分多个表的方式(横向拆分和纵向拆分)及如何解决跨表查询效率问题
- 浅析MySQL的in和or的效率问题
- MySQL数据库:存储引擎
- MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?