MySQL索引失效的10个场景(详细测试)

您所在的位置:网站首页 mysql导致索引失效的情况 MySQL索引失效的10个场景(详细测试)

MySQL索引失效的10个场景(详细测试)

2024-07-16 16:54| 来源: 网络整理| 查看: 265

废话不说先上图(mysql索引失效的场景)~~

 

下面我们分别对这10个场景进行测试!

准备工作 1.新建user表,并创建索引 CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT, `code` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL, `age` int DEFAULT '0', `name` varchar(30) COLLATE utf8mb4_bin DEFAULT NULL, `height` int DEFAULT '0', `address` varchar(30) COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_code_age_name` (`code`,`age`,`name`), KEY `idx_height` (`height`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

新建的表中包含三个索引:

id: 数据库的主键 idx_code_age_name: 由code,age,name三个字段组合的索引 idx_height: 普通索引 2.向表中处插入数据 INSERT INTO `user` (id, code, age, name, height, address) VALUES (1, '101', 21, '菜虚坤', 180,'温州'); INSERT INTO `user` (id, code, age, name, height, address) VALUES (2, '102', 30, '谢嘎子', 173,'北方'); INSERT INTO `user` (id, code, age, name, height, address) VALUES (3, '103', 23, '张三', 174,'成都'); 3.查看数据库的版本

select version();

我们使用的数据库版本为8.0.16

4.explain关键字使用

mysql中,我们可以使用explain语句来放在我们查询的sql之前,来判断我们的索引是否生效!

例如:explain select * from user where id = 1;

结果:

从图中我们可以看出,因为id是主键,所以这条查询语句我们用到了主键索引!

情形一: 联合索引不满足最左匹配原则

新建的user表中,我们添加了idx_code_age_name联合索引。

该索引的顺序为:

code age name 1.索引生效的情况

以下四种情况,都能正常走索引:

explain select * from user where `code`='101'; explain select * from user where `code` = '101' and age = 21; explain select * from user where `code` = '101' and `name` = '周星驰'; explain select * from user where `code` = '101' and age = 21 and `name` = '周星驰';

运行结果都为:

上面的4条sql,查询条件都有code字段,code字段是联合索引的第一个字段,也就是最左边的字段,只要有该字段存在,我们的sql就能走索引!这也就是我们所说的最左匹配原则!

2.索引失效的情况 explain select * from user where age = 21; explain select * from user where name = '周星驰'; explai


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3