天天看點

【MySQL】order by 結果不準确的問題及解決

一 介紹 

提醒讀者朋友注意。

二 分析 

環境準備 

注意字段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結果集有比較高的嚴格要求 ,請記得利用唯一鍵排序。