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代码获取列表的第一条。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话