MySQL 5.7中select列不在索引列出现的选择性走索引的问题
不要在重复值很多的列上建立索引
- 建表语句
CREATE TABLE `violation_record` (
`record_id` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) NOT NULL,
`event_description` varchar(255) NOT NULL,
`punishment` varchar(128) NOT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`record_id`),
KEY `sss` (`punishment`),
KEY `idx_student_id` (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2092 DEFAULT CHARSET=utf8mb4;
- 现在往表中插入了2088行数据
- 其中一半(1044行)数据的punishment字段设置为’警告’,另一半设置为’’(空字符串)。此时select * 查询的表现
- 下面是一行数据的punishment字段为’警告’,其他全部为’’,select * 查询的表现
- 最后一项测试,当punishment字段相同行数比例相差不大的时候,都是可以走到索引的。