當SQL中ORDER BY待排序欄位值相同時,查詢結果是什麼?
阿新 • • 發佈:2019-01-01
簡書 Wwwwei
轉載請註明原創出處,謝謝!
前言
資料庫分頁是後臺經常要使用的技術手段,有時候進行資料庫查詢會根據業務需要對某一欄位排序,那麼當待排序欄位值相同時,我們得到的查詢結果會是什麼呢?
問題描述
資料分頁時需要根據資料記錄建立時間create_time欄位倒序,即使用order by create_time desc,但是我們會發現,前端進行請求時獲取的資料並不正確,分頁中出現了一定的重複資料。
問題原因
由於大量資料是併發建立的,所以create_time欄位值是相同的。這裡會有一個很有趣的問題,當order by的欄位相同的時候 系統對資料的排序可能變得隨機,即一會兒這條資料在前面,一會兒這條資料在後面了 ,所以當翻頁的時候我們很容易便看到了重複的資料。
做個實驗
我們可以通過一組資料做個簡單實驗,以下為一組實驗資料,member_id欄位為資料主鍵,資料的create_time欄位完全相同:
實驗資料
我們執行以下SQL,將資料以create_time欄位倒序查詢,查詢結果如下:
select member_id,create_time from member order by create_time desc;
查詢結果