MySql 5.7 同时使用order by和limit时结果集不正确的问题

MySql 5.7 同时使用order by和limit时结果集不正确的问题

工作中写的一句sql根据日期排序后进行分页,结果缺失了一些数据,且出现了重复的数据。

在sql不断的调整尝试后发现,在同时使用order by和limit后的结果集和使用order by之后的结果集不一致。

原文如下:

If you combine LIMIT row_count with ORDER BY, MySQL stops sorting as soon as it has found the first row_count rows of the sorted result, rather than sorting the entire result. If ordering is done by using an index, this is very fast. If a filesort must be done, all rows that match the query without the LIMIT clause are selected, and most or all of them are sorted, before the first row_count are found. After the initial rows have been found, MySQL does not sort any remainder of the result set.

One manifestation of this behavior is that an ORDER BY query with and without LIMIT may return rows in different order, as described later in this section.

大概意思:

如果你把order BY 和 limit N 混合使用,mysql会在找排序结果中的第一个 “第N条记录” 时就停止,而不会排序整个结果集。如果排序是通过索引完成的,那么这个操作就会非常快。如果必须要通过数据文件排序,所有符合查询条件的记录都将被选中,并且所有的数据都将被排序,直到第一个 “第N条记录” 被找到。在第一条的数据都被找到之后,mysql不会继续把结果中剩余的数据进行排序。

这种实现行为的表现之一就是order by查询 在配合 limit 使用和不配合limit使用的情况下的返回值,排序情况是不同的

解决方案是在order by后面再加上一个字段id asc作为排序条件。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,487评论 0 13
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,418评论 0 10
  • 1.A simple master-to-slave replication is currently being...
    Kevin关大大阅读 5,991评论 0 3
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,750评论 0 30
  • kin144磁性的黄种子 星期一 1.早上来办公室,浇了几盆绿萝,把我办公桌上的白掌换了水,这盆白掌是16年宝姐送...
    Sweety_3983阅读 272评论 0 0