当前位置:   article > 正文

mysql limit 重复_mysql limit 翻页数据重复的问题

sql limit 10,10为什么有重复数据

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列,数据库并不保证每一次排序都是一致的,也就是说分页内容会出现重复的可能性。

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

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

2.解决方法

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

3.拓展阅读

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/139447
推荐阅读
相关标签
  

闽ICP备14008679号