MySQL索引失效的10个场景(详细测试) |
您所在的位置:网站首页 › mysql导致索引失效的情况 › MySQL索引失效的10个场景(详细测试) |
废话不说先上图(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 |