mysql,explain执行计划组合索引测试

mysql,explain执行计划组合索引测试创建测试表,添加测试数据CREATETABLE`users`(`id`int(11)NOTNULL,`name`varchar(255)DEFAULTNULL,`age`int(11)DEFAULTNULL,`manager_id`int(11)DEFAULTNULL,PRIMARYKEY(`id`),KEY`idex_…

创建测试表,添加测试数据

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `manager_id` int(11) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idex_name_age_managerid` (`name`,`age`,`manager_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('205', null, '24', '102','henan');
INSERT INTO `users` VALUES ('206', null, '25', '102','shandong');
INSERT INTO `users` VALUES ('101', 'jack', '35', null,'beijing');
INSERT INTO `users` VALUES ('102', 'tom', '30', '101','shanghai');
INSERT INTO `users` VALUES ('201', 'xiaoli', '23', '102','shanxi');
INSERT INTO `users` VALUES ('203', 'xiaoliu', '22', '102','guangzhou');

根据组合索引 idex_name_age_managerid (`name`,`age`,`manager_id`) 测试不同场景下的sql执行计划

1)EXPLAIN SELECT * FROM `users` WHERE name = ‘tom’ and age = 30 and manager_id = 101;

mysql,explain执行计划组合索引测试

 2)EXPLAIN SELECT * FROM `users` WHERE name = ‘tom’;

mysql,explain执行计划组合索引测试

3)EXPLAIN SELECT * FROM `users` WHERE age = 30;

mysql,explain执行计划组合索引测试

4)EXPLAIN SELECT * FROM `users` WHERE manager_id = 101;

mysql,explain执行计划组合索引测试

5)EXPLAIN SELECT * FROM `users` WHERE name = ‘tom’ and age = 30;

mysql,explain执行计划组合索引测试

6)EXPLAIN SELECT * FROM `users` WHERE name = ‘tom’ and manager_id = 101;

mysql,explain执行计划组合索引测试

7)EXPLAIN SELECT * FROM `users` WHERE age = 30 and manager_id = 101;

mysql,explain执行计划组合索引测试

8)EXPLAIN SELECT * FROM `users` WHERE age = 30 AND name = ‘tom’;

mysql,explain执行计划组合索引测试

9)EXPLAIN SELECT * FROM `users` WHERE manager_id= 101 AND name = ‘tom’;

mysql,explain执行计划组合索引测试

 

结论总结:

1、由以上执行计划可以看出,第3、4、7个执行计划没有命中索引,所以,只要是以含有 name条件的sql语句都命中了索引(遵循左前缀原则);

2、第8、9个sql虽然没有以name开头,但是也命中了索引,说明 mysql的查询优化器会帮你优化成索引可以识别的形式。

3、根据执行计划分析,命中索引的sql第6、9个查询效率是比较低的,filtered只有16.67,所以:

组合索引 idex_name_age_managerid (`name`,`age`,`manager_id`)   sql 执行为了提高执行效率,where 条件字段顺序应该遵循以下组合

name

name,age

name,age,manager_id

注:

filtered = (查询结果条数/rows),例如第9个查询 filtered = 1/6 = 16.67

今天的文章mysql,explain执行计划组合索引测试分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33941.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注