一 介紹
提醒讀者朋友注意。
二 分析
環境準備
注意字段a 上面是沒有索引的。
初始化資料
執行兩個 根據非索引字段且有重複值的 order by 排序
得到id 為10, 9, 14, 8 的結果集
得到id 為10 9 8 的結果集
為a字段加上索引
從上面的測試來看對于一個非唯一字段 無論是否含有索引,結果集都是不确定的。
三 解決方法
1 業務屬性確定 a 字段不能唯一,則需要針對排序結果再加上 一個唯一字段的排序 比如id
使用order by id/unique_key 排序之後,前三個結果集是一緻的10,9,14 。 結果集滿足我們的需求。進而解決不确定性帶來的問題。
2 是否可以去掉不必要的order by,這個是由業務邏輯決定的。
四 總結
dba在和開發溝通/教育訓練過程中要注意這一點 基于非唯一字段的排序 結果集是不确定的。如果業務邏輯對分頁或者order by結果集有比較高的嚴格要求 ,請記得利用唯一鍵排序。