MySql 5.7 同時使用order by和limit時結(jié)果集不正確的問題

MySql 5.7 同時使用order by和limit時結(jié)果集不正確的問題

工作中寫的一句sql根據(jù)日期排序后進行分頁,結(jié)果缺失了一些數(shù)據(jù),且出現(xiàn)了重復(fù)的數(shù)據(jù)。

在sql不斷的調(diào)整嘗試后發(fā)現(xiàn),在同時使用order by和limit后的結(jié)果集和使用order by之后的結(jié)果集不一致。

原文如下:

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會在找排序結(jié)果中的第一個 “第N條記錄” 時就停止,而不會排序整個結(jié)果集。如果排序是通過索引完成的,那么這個操作就會非???。如果必須要通過數(shù)據(jù)文件排序,所有符合查詢條件的記錄都將被選中,并且所有的數(shù)據(jù)都將被排序,直到第一個 “第N條記錄” 被找到。在第一條的數(shù)據(jù)都被找到之后,mysql不會繼續(xù)把結(jié)果中剩余的數(shù)據(jù)進行排序。

這種實現(xiàn)行為的表現(xiàn)之一就是order by查詢 在配合 limit 使用和不配合limit使用的情況下的返回值,排序情況是不同的

解決方案是在order by后面再加上一個字段id asc作為排序條件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,922評論 0 13
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,868評論 0 10
  • 1.A simple master-to-slave replication is currently being...
    Kevin關(guān)大大閱讀 6,254評論 0 3
  • 今天看到一位朋友寫的mysql筆記總結(jié),覺得寫的很詳細很用心,這里轉(zhuǎn)載一下,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,836評論 0 30
  • kin144磁性的黃種子 星期一 1.早上來辦公室,澆了幾盆綠蘿,把我辦公桌上的白掌換了水,這盆白掌是16年寶姐送...
    Sweety_3983閱讀 358評論 0 0

友情鏈接更多精彩內(nèi)容