oracle组合索引失效_MySql组合索引最左侧原则失效

最近在看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结果还是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值