最近在看MySQL索引的知识,看到组合索引的时候,有一个最左侧原则,我就建了个简单的表验证一下,过程中碰到有些不懂的,在这里求教一下,mysql版本5.7的
CREATE TABLE `testp` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`users_id` int(10) unsigned NOT NULL COMMENT '学生用户ID',
`activity_id` int(11) NOT NULL COMMENT '活动ID',
`phone` varchar(20) NOT NULL COMMENT '手机号码',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_activity_users` (`activity_id`,`users_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='名表';
-- ----------------------------
-- Records of testp
-- ----------------------------
INSERT INTO `testp` VALUES ('1', '272002', '17', '12345678900');
INSERT INTO `testp` VALUES ('2', '290253', '19', '12345678900');
INSERT INTO `testp` VALUES ('3', '177652', '17', '12345678900');
INSERT INTO `testp` VALUES ('4', '36482', '17', '12345678900');
INSERT INTO `testp` VALUES ('5', '36482', '19', '12345678900');
INSERT INTO `testp` VALUES ('6', '290253', '17', '12345678900');
INSERT INTO `testp` VALUES ('7', '272207', '17', '12345678900');
INSERT INTO `testp` VALUES ('8', '272207', '19', '12345678900');
表结构如上,
把activity_id,users_id组合一下,navicat上信息如下图:
首先运行第一条sql:
EXPLAIN SELECT * FROM `testp` WHERE activity_id=17 AND users_id=272002;
其结果如下图:
发现key这个列有值,这个是对的
然后我运行如下sql:
EXPLAIN SELECT * FROM `testp` WHERE activity_id=17;
结果是:
发现没有使用到索引,正常情况不是可以使用到索引吗?
之后我又去试了把 activity_id=17改成 activity_id=19:
EXPLAIN SELECT * FROM `testp` WHERE activity_id=19;
结果:
结果显示使用到了索引
也就是说这个和值也有关系???请各位解答下,谢谢!!
之前以为是Unique类型的原因,我把Unique改成Normal结果还是一样的。