千家信息网

小心避坑:MySQL分页时出现的数据重复问题

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,全文链接: https://www.modb.pro/db/232010 问题描述在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit
千家信息网最后更新 2026年11月03日小心避坑:MySQL分页时出现的数据重复问题

全文链接: https://www.modb.pro/db/23201

0 问题描述

在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页。但是,当limit遇到order by的时候,可能会出现翻到第二页的时候,竟然又出现了第一页的记录。
具体如下:
SELECT
`post_title`,
`post_date`
FROM
post
WHERE
`post_status` = 'publish'
ORDER BY
view_count desc
LIMIT
5, 5

使用上述SQL查询的时候,很有可能出现和LIMIT 0,5相同的某条记录。而如果使用如下方式,则不会出现重复的情况:
SELECT
*
FROM
post
WHERE
post_status = 'publish'
ORDER BY
view_count desc
LIMIT
5, 5

但是,由于post表的字段很多,仅仅希望用这两个字段,不想把post_content也查出来。为了解决这个情况,在ORDER BY后面使用了两个排序条件来解决这个问题,如下:
SELECT
`post_title`,
`post_date`
FROM
post
WHERE
`post_status` = 'publish'
ORDER BY
view_count desc,
ID asc
LIMIT
5, 5

按理来说,MySQL的排序默认情况下是以主键ID作为排序条件的,也就是说,如果在view_count相等的情况下,主键ID作为默认的排序条件,不需要我们多此一举加ID asc。 但是事实就是,MySQL再order by和limit混用的时候,出现了排序的混乱情况。

1 分析问题

在MySQL 5.6的版本上,优化器在遇到order by limit语句的时候,做了一个优化,即 使用了priority queue。
使用 priority queue 的目的, 就是在不能使用索引有序性的时候,如果要排序,并且使用了limit n,那么只需要在排序的过程中,保留n条记录即可,这样虽然不能解决所有记录都需要排序的开销,但是 只需要 sort buffer 少量的内存就可以完成排序。
之所以MySQL 5.6出现了第二页数据重复的问题, 是因为 priority queue 使用了堆排序的排序方法,而堆排序是一个不稳定的排序方法,也就是相同的值可能排序出来的结果和读出来的数据顺序不一致。
MySQL 5.5 没有这个优化,所以也就不会出现这个问题。
也就是说,MySQL 5.5是不存在本文提到的问题的,5.6版本之后才出现了这种情况。
再看下MySQL解释sql语言时的执行顺序:
(1)     SELECT 
(2) DISTINCT
(3) FROM
(4) JOIN
(5) ON
(6) WHERE
(7) GROUP BY
(8) HAVING
(9) ORDER BY
(10) LIMIT

执行顺序依次为 form… where… select… order by… limit…,由于上述priority queue的原因,在完成select之后,所有记录是以堆排序的方法排列的,在进行order by时,仅把view_count值大的往前移动。
但由于limit的因素,排序过程中只需要保留到5条记录即可,view_count并不具备索引有序性,所以当第二页数据要展示时,mysql见到哪一条就拿哪一条,因此,当排序值相同的时候,第一次排序是随意排的,第二次再执行该sql的时候,其结果应该和第一次结果一样。

......

查看全文请点击文章顶部链接

排序 时候 问题 情况 数据 相同 也就是 方法 条件 结果 顺序 有序 两个 也就是说 全文 字段 就是 有序性 版本 第一次 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技社 重庆互联网络科技 没上市的科技互联网公司 科技制造互联网公司 上海致骋互联网科技 互联网 视角下的科技创新 互联网金融和金融科技 互联网科技生活的内容 海南购全球互联网科技 衡水科技产业互联网平台 成都互联网科技公司100强 健康食品互联网创新科技园项目 本届互联网博览会上的黑科技 内蒙古九一互联网科技 互联网公司高科技产品 宇信科技在杭州互联网排第几 广州有谷有贝互联网科技有限公司 珠海东科互联网科技有限公司 互联网科技企业商标注意事项 科技互联网专业务虚会材料 保险科技 互联网保险 百单网互联网科技有限公司怎么样 哈尔滨大商圈互联网科技有限公司 科技和互联网公司 上海互联网科技有限公司 宜安科技 互联网金融 科技互联网公司logo 深圳天众互联网科技公司 互联网金融科技展 互联网对科技影响
0