mysql進行分頁查詢資料不準確問題分析

2021-10-10 11:18:40 字數 1129 閱讀 3483

新功能上線發現分頁出現了問題,分析了一段時間發現是mysql的問題,mysql對欄位相同值排序後再分頁資料會不準確

例子使用的mysql版本是5.6.31

舉個簡單的例子,資料表t如下:ab

1122

3344

5562

7282

select a,b from t order

by b limit0,

2;

會出現:ab

1182

select a,b from t order

by b limit2,

2;

會出現:ab

3282

select a,b from t order

by b limit4,

2;

會出現:ab

7282

select a,b from t order

by b limit6,

2;

會出現:ab

4455

可以看出,當b列的值為2時,mysql分頁得到的資料和想要的資料並不匹配

在mysql中,如果排序的字段值都不同還好,這樣分頁不會出錯,但是如果排序的字段值相同,那麼mysql就不知道如何分頁了,查詢出的資料就會有問題。

看一下表中,是否還有不唯一的列值,將這個列也加入到排序中

這裡可以將sql調整成

select a,b from t order

by b,a limit0,

2;

此時再進行分頁,資料就不會出現問題了。

ps: 另外,這個問題與mysql的版本有關係,在5.1版本,針對有欄位相同的資料排序分頁並沒有出現問題,但是5.6版本卻有分頁查詢資料不準確的問題。

不管怎樣,對多個字段排序再分頁都是沒問題的,所以,最好都仔細檢查一下分頁sql中是否有對字段進行排序,如果排了序,最好還是再新增排序字段,這樣能保證不出問題。

相關:

Mysql 分頁查詢 快照 Mysql分頁查詢優化

select from orders history where type 8 limit 1000,10 該條語句將會從表 orders history 中查詢offset 1000開始之後的10條資料,也就是第1001條到第1010條資料 1001 id 1010 資料表中的記錄預設使用主鍵 一...

mysql 分頁查詢 失效 mysql分頁查詢

比如每頁10條,分頁查詢 語法 select from table limit offset,rows offset指定要返回的第一行的偏移量,rows第二個指定返回行的最大數目。初始行的偏移量是0 不是1 select from table limit 0,10 第一頁 select from t...

Mysql分頁查詢丟失資料

將乙個sql的查詢結果集匯出為檔案,由於一次查詢結果集可能上百萬條,在開發環境和測試環境均造成了記憶體溢位的問題。因此改為分頁查詢資料的方式,雖然慢點,但是規避了記憶體溢位的問題。但是,在這一百多萬條匯出的資料中,發現匯出的檔案中的資料與資料庫直接查詢出的資料不一致。偶發性的部分資料缺失,部分資料有...