mysql 联合索引 复合索引 (abc) 命中率:在工作中经常会使用到联合索引,在百度查询多很多资料也有说法不一的、给大家实测下100w数据下查询命中率,废话不多说、上干货;
创建测试表:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE `test`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) NOT NULL DEFAULT 1,
`b` int(11) NOT NULL DEFAULT 1,
`c` int(11) NOT NULL DEFAULT 1,
`d` int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;
SET FOREIGN_KEY_CHECKS = 1;
在插入数据前添加索引,在100w数据添加还可以接受 数量越大越慢 带来的也是io占用 具体原理百度搜索 mysql innoDB索引原理(聚簇索引) 、 b+树。(或后续更新
alter table test add index sindex(a,b,c);
批量插入100w条数据做测试,漫长的等待过程,超时 set_time_limit(0);
$n = 1000000;
for ($i = 0;
$i <= $n;
$i++) {
//a 范围 0 - 1000 随机整数
//b 范围 0 - 10000 随机整数
//c 范围 0 - 100000 随机整数
//d 范围 0 - 1000 随机整数
$data['a'] = rand(0, 1000);
$data['b'] = rand(0, 10000);
$data['c'] = rand(0, 100000);
$data['d'] = rand(0, 1000);
DB::table('test')->insert($data);
}
测试索引命中、为了更清晰直观体现索引命中率、我把结果都截图到每条语句的下方导致篇幅过长;
1.explain select * from test where a = 437 and b = 7800 and c = 33561;
文章图片
2.explain select * from test where a = 437 and c = 7800 and b = 33561;
文章图片
3.explain select * from test where a = 437 and b = 33561;
文章图片
4.explain select * from test where a = 437
文章图片
5.explain select * from test where c = 7800 and b = 33561;
文章图片
6.explain select * from test where b = 33561;
文章图片
7.explain select * from test where b = 33561 and a = 437;
文章图片
8.explain select * from test where b = 33561 and c = 7800 and a = 437;
文章图片
结论:
1.and and 只要用到了最左侧a都会使用到索引
2.a and b or c 不会使用索引
文章图片
3.最左侧a列被大于、小于、不等于比较的、不使用索引
文章图片
4.b列 c列使用大于、小于、不等于比较的 会使用索引
文章图片
【mysql联合索引命中率abc】5. orderby a desc group by a 只要保持最左侧a原则 都会使用索引;
推荐阅读
- mysql|InnoDB数据页结构
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- mysql|一文深入理解mysql
- Java毕业设计项目实战篇|Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)
- SQL|SQL基本功(五)--函数、谓词、CASE表达式
- vue|电商后台管理系统(vue+python|node.js)
- Java及基础算法及数据结构|旧笔记整理(MySQL)
- mysql|双非本211硕,无实习无项目,自学大数据开发,秋招上岸
- 数据库|Mysql--InnoDB存储引擎详解
- MySQL学习笔记-9-order by