背景:
分頁查詢排序後的數據,是一個很是常見的業務場景;但當使用不惟一的字段排序時,分兩頁查詢的數據可能出現同一條數據,並丟失數據!mysql
示例:
一樣的查詢條件,offset不一樣,居然取到了同一條數據?!sql
緣由解析(取自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便可;spa