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代码获取列表的第一条。

posted on 2022-03-24 18:01  愤怒的苹果ext  阅读(50)  评论(0编辑  收藏  举报

导航