首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >日常问题:MySQL排序字段数据相同不能分页问题

日常问题:MySQL排序字段数据相同不能分页问题

作者头像
栗筝i
发布2022-12-02 08:19:36
发布2022-12-02 08:19:36
2.4K0
举报
文章被收录于专栏:迁移内容迁移内容
【问题日期】
  • 2022-11-14 22:45:12
【问题描述】
  • MySQL 排序字段数据相同不能分页问题:在分页查询数据时,按创建时间排序,由于数据是批量创建的,导致部分数据创建时间一样,而此时分页查询数据,翻页后出现重复数据
【问题拆解】
  • 分页查询数据
  • 按照创建时间排序&存在创建时间相同的数据
  • 翻页后出现重复数据
【问题来源】
  • 朋友遇到的
【可能原因】
  • 是因为排序字段只有创建时间
【参考链接】
  • MySQL 官方文档:
    • https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html
    • If multiple rows have identical values in the ORDER BY columns, the server is free to return those rows in any order, and may do so differently depending on the overall execution plan. In other words, the sort order of those rows is nondeterministic with respect to the nonordered columns.
    • 如果多行在列中具有相同的值 ORDER BY,则服务器可以自由地以任何顺序返回这些行,并且可能会根据整体执行计划以不同的方式返回。换句话说,这些行的排序顺序对于无序的列是不确定的。
  • 51CTO 博客 - 《MySQL排序字段数据相同不能分页问题》:
    1. https://blog.51cto.com/u_15704340/5439010
    2. 如果 order by 排序的字段有相同的数据,则服务器可以自由地以任何顺序返回这些行,并且可能会根据整体执行计划以不同的方式返回。
【解决方案】
  • 可以在 order by 后面加上一个唯一的 id
【问题总结】
  • 如果多行在列中具有相同的值 ORDER BY,则服务器可以自由地以任何顺序返回这些行,并且可能会根据整体执行计划以不同的方式返回。换句话说,这些行的排序顺序对于无序的列是不确定的。
  • 对于带有ORDER BYGROUP BY LIMIT 子句的查询,优化器会在默认情况下尝试选择有序索引,因为这样做会加快查询执行速度。在 MySQL 5.7.33 之前,无法覆盖此行为,即使在使用其他优化可能更快的情况下也是如此。从 MySQL 5.7.33 开始,可以通过将 optimizer_switch系统变量的 prefer_ordering_index标志设置为off.
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【问题日期】
  • 【问题描述】
  • 【问题拆解】
  • 【问题来源】
  • 【可能原因】
  • 【参考链接】
  • 【解决方案】
  • 【问题总结】
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档