MySQL limit 翻页数据重复的问题解决

 更新时间:2026年03月08日 09:36:49   作者:小恒恒  
MySQL5.6引入了LIMIT QueryOptimization特性,可能会导致分页数据重复,下面就来详细的介绍一下MySQL limit 翻页数据重复的问题解决,具有一定的参考价值,感兴趣的可以了解一下

0.背景

Mysql版本:5.7

1.出问题原因

在MySql5.6开始,limit加入了一个新特性:LIMIT Query Optimization。假设你写了这样一个sql:

select * from my_table limit 10,10;

它是符合优化原则的:

MySQL sometimes optimizes a query that has a LIMIT row_count clause and no HAVING clause:

纵览所有的优化原则,发现与我们最普通的情况有关系的也只有这一条:

If an index is not used for ORDER BY but a LIMIT clause is also present, the optimizer may be able to avoid using a merge file and sort the rows in memory using an in-memory filesort operation.

意即:如果索引未用于ORDER BY,但也存在LIMIT子句,则优化器可能能够避免使用合并文件,并使用内存中文件排序操作对内存中的行进行排序。 再有和我们有点关系的可能也就是:

If you select only a few rows with LIMIT, MySQL uses indexes in some cases when normally it would prefer to do a full table scan.

意即:如果您只需要查出几行,MySQL会因为避免全表扫描而在某些情况下使用索引。

MySQL的优化规则很复杂,如果你不明确指定一个不重复的用于order by列,数据库并不保证每一次排序都是一致的,也就是说分页内容会出现重复的可能性。

我认同MySQL order by limit 分页数据重复问题中的观点:

分页是建立在排序的基础上,进行了数量范围分割。排序是数据库提供的功能,而分页却是衍生的出来的应用需求。

故解决问题的方式就很明了了。

2.解决方法

select * from my_table order by id limit 10,10 ;

到此这篇关于MySQL limit 翻页数据重复的问题解决的文章就介绍到这了,更多相关MySQL limit 翻页数据重复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL 日期和时间函数示例详解

    MySQL 日期和时间函数示例详解

    本文详细介绍了MySQL中处理日期和时间的各种函数,包括获取当前日期时间、日期提取、格式化和解析、计算和运算、生成和构造、验证和调整、时间戳转换以及实用查询示例,并提供了性能优化建议,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • MySQL OOM 系统二 OOM Killer

    MySQL OOM 系统二 OOM Killer

    前面一节重点分享了Linux的内存分配策略,基于上述的分配策略,为了规避超售的风险,Linux采了一种OOM Killer的机制,即系统可用内存(包括Swap)即将使用完之前,选择性的Kill掉一些进程以求释放一些内存
    2016-07-07
  • MySQL 行转列详情

    MySQL 行转列详情

    这篇文章主要介绍了MySQL 行转列详情,MySQL 行转列语句不难,具体的详细资料,感兴趣的小伙伴可以参考一下
    2022-01-01
  • MySQL对小数进行四舍五入的操作实现

    MySQL对小数进行四舍五入的操作实现

    数学函数是MySQL中常用的一类函数,其主要用于处理数字,包括整型和浮点数等等,本文主要介绍了MySQL对小数进行四舍五入的操作实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • mysql数据库的加密与解密方式

    mysql数据库的加密与解密方式

    这篇文章主要介绍了mysql数据库的加密与解密方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • MySQL分区分表实现方法示例详解

    MySQL分区分表实现方法示例详解

    ShardingSphere-JDBC通过在应用层进行数据分片,可以帮你轻松实现分区、分表和分库,下面我用具体的配置和代码示例来说明如何使用,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-10-10
  • mysql分组排序如何取第一条数据

    mysql分组排序如何取第一条数据

    这篇文章主要介绍了mysql分组排序如何取第一条数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 详谈mysql order by in 的字符顺序(推荐)

    详谈mysql order by in 的字符顺序(推荐)

    下面小编就为大家带来一篇详谈mysql order by in 的字符顺序(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • MySQL 配置文件my.cnf 例子最详细翻译

    MySQL 配置文件my.cnf 例子最详细翻译

    MySQL 配置文件my.cnf 例子最详细翻译,需要的朋友可以看看。
    2009-05-05
  • MySQL设置用户权限的简单步骤

    MySQL设置用户权限的简单步骤

    这篇文章主要给大家介绍了关于MySQL设置用户权限的简单步骤,学习MySQL数据库,MySQL用户权限设置是需要首先学习的,需要的朋友可以参考下
    2023-07-07

最新评论