MySQL bit类型增加索引后查询结果不正确案例浅析

昨天同事遇到的一个案例,这里简单描述一下:一个表里面有一个bit类型的字段,同事在优化相关SQL的过程中,给这个表的bit类型的字段新增了一个索引,然后测试验证 时,居然发现SQL语句执行结果跟不加索引不一样。加了索引后,SQL语句没有查询出一条记录,删除索引后,SQL语句就能查询出几十条记录。下面我们构造一个简单 的例子,重现一下这个案例

我们先创建表student_attend,初始化一些数据。这篇文章的测试环境为MySQL 8.0.35社区版。

CREATE TABLE `student_attend` (<br>  `id` int NOT NULL AUTO_INCREMENT COMMENT '自增编号',<br>  `std_id` int DEFAULT NULL COMMENT '学号',<br>  `class_id` int DEFAULT NULL COMMENT '课程编号',<br>  `is_attend` bit(1) DEFAULT b'1' COMMENT '是否缺陷考勤',<br>  PRIMARY KEY (`id`)<br>) ENGINE=InnoDB;<br><br><br>insert into student_attend(std_id, class_id, is_attend)<br>select 1001, 1, 1 from dual union all<br>select 1001, 2, 0 from dual union all<br>select 1001, 3, 1 from dual union all<br>select 1001, 4, 1 from dual union all<br>select 1001, 5, 1 from dual union all<br>select 1001, 6, 0 from dual union all<br>select 1002, 1, 1 from dual union all<br>select 1002, 2, 1 from dual union all<br>select 1003, 1, 0 from dual union all<br>select 1003, 2, 0 from dual;<br><br>