1. 程式人生 > >Mysql 【order by 不唯一欄位】與【limit】混用的坑

Mysql 【order by 不唯一欄位】與【limit】混用的坑

背景:
分頁查詢排序後的資料,是一個非常常見的業務場景;但當使用不唯一的欄位排序時,分兩頁查詢的資料可能出現同一條資料,並丟失資料!

示例:
這裡寫圖片描述
同樣的查詢條件,offset不同,竟然取到了同一條資料?!

原因解析(取自Mysql官方文件):
這裡寫圖片描述
上面官方文件裡面有提到如果你將Limit row_count與order by混用,mysql會找到排序的row_count行後立馬返回,而不是排序整個查詢結果再返回。如果是通過索引排序,會非常快;如果是檔案排序,所有匹配查詢的行(不帶Limit的)都會被選中,被選中的大多數或者全部會被排序,直到limit要求的row_count被找到了。如果limit要求的row_count行一旦被找到,Mysql就不會排序結果集中剩餘的行了。(此段取自網路)

總結(取自Mysql官方文件):
這裡寫圖片描述

當排序和分頁結合時,一定要非常警覺,order by 後應採用唯一的欄位或欄位組合,如:在上例中採用order by sku_id,id即可;