1. 准备数据环境
1.1 建表
CREATE TABLE `t_test_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '组名',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建人',
`code` varchar(40) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '编码',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
1.2 造数据
先造一些基础数据,然后批量造,批量造使用如下语句:
INSERT INTO `t_test_group`(`group_name`, `create_by`, `code`)
select `group_name`, `create_by`,UUID() from t_test_group;
image.png
最终造了300万条数据,如下图
image.png
2. 查询分析
2.1 使用主键查询
select * from t_test_group where id= 300000;
image.png
查询使用时间,达到了0.021S,速度非常快,使用主键查询还是很有优势的。
image.png
2.1 使用非主键查询
image.png使用非主键查询耗时都在3S左右,相比使用主键查询慢很多,相差141倍左右。
2.2 给非主键字段添加索引
image.png通过给非主键字段添加索引后,查询达到了0.05S左右,速度快了60倍,但和使用主键相比,还是慢了1倍。
2.3 导致索引失效的关键字
2.3.1 关键字"like"
前后都加‘%’的情况:
image.png
使用关键字like查询效率非常低,
只加后'%':
2.3.2 关键字"in"
image.png使用关键字IN查询效率很快,说明此时用到了索引,IN不会导致索引失效;另外,3个位置一起查的速度和单个查的速度几乎一样,所以能一起查就尽量一起查。
网友评论