1)首先数据库里的表结构是如下(里边有个组合索引:idx_a_b)
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` varchar(255) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_a_b` (`a`,`b`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
2)当前数据库的数据有
3)我所期盼的效果是查询出字段a为“甲”的前2条数据,也即上图的红框部门,我所使用的查询语句及其结果如下图
疑问:通过上图可以看到,查询的并不是id为1和2的数据,这是为什么呢?
答案就在于我们走的是索引查询,即走的是idx_a_b这个索引,索引对字段b的数据进行了由小到大的排序。不了解索引的同学,可以搜一下b+索引的原理。
解决方式:加多一个 order by id 作为排序条件