当前位置: 代码网 > it编程>数据库>Mysql > MySQL limit 翻页数据重复的问题解决

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

2026年03月08日 Mysql 我要评论
0.背景mysql版本:5.71.出问题原因在mysql5.6开始,limit加入了一个新特性:limit query optimization。假设你写了这样一个sql:select * from

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 翻页数据重复内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com