MySQL LIMIT + order by limit n,m 和 limit n的小坑
背景
- 场景:数据刚刚初始化,
order by的字段值一样
,想获取列表的第一条数据,但是发现limit
后不是第一条。
看数据
- 此时有3条数,id分别为38 、39、40。
limit n
- 此时查询到的数据是id为40的。
limit n,m
问题
注意:问题发生的场景
order by
的两个值是相等的。然后limit
- 其实我要的是id为
39
那条数据,但我取一条的时候总是返回了id为40
的数据。 - 这个问题是在排序字段数据内容相同的情况下出现,而且不稳定。
- 有可能下一页还会看到前一页的数据。
解决方案
第一种:增加排序字段索引,多个字段增加联合索引
-
增加索引
-
查询结果
第二种:排序增加一个唯一字段,例如id,获得稳定排序
第三种方式:代码获取第一条数据
- 这是我目前使用的方式,因为我只需要第一条诉,我查询了列表(取消了limit),然后Java代码获取列表的第一条。