mysql排序不穩定,分頁查詢資料有重複和遺漏

2021-08-03 23:05:54 字數 557 閱讀 8369

現象:業務方在系統新增使用者時,提示 使用者a已經存在,但是介面中沒有。

解決過程:資料庫中看得到。

select * from user where yn = 1 order by roletype 是有的。

那為啥 select * from user where yn =1 order by roletype limit 0,10;

資料就出現問題呢?

看了很久,也沒有發現問題。

本地資料量太少,又懶,沒有把線上使用者資料匯入到本地測試表。

把sql發給了dba,幫忙分析了下。

很可能的原因:roletype不是主鍵,多個使用者的 角色可能是一致的。最終mysql分頁時,取資料 不穩定。

難道只有在limit分頁的時候,才會不穩定?

解決辦法是,增加id desc 第2個排序條件。

當rolttype相同的時候,再按照 id 降序,確保順序是唯一的。

第1頁和第2頁存在重複的使用者,還漏掉了部分使用者。

第1次遇到。

平時看sql,感覺也沒啥。

遇到了問題,猛然一驚"還有這種操作"。

穩定與不穩定排序

首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。在簡單形式化一下,如果ai aj,ai原來在位置前,排序後ai還是要在aj位置前。其次,說一下穩定性的好處。排序演算法如果是穩定的,那麼從乙個鍵上排序,然後再從另乙個...

穩定排序和不穩定排序

這幾天筆試了好幾 次了,連續碰到乙個關於常見排序演算法穩定性判別的問題,往往還是多選,對於我以及和我一樣拿不準的同學可不是乙個能輕易下結論的題目,當然如果你筆試之前 已經記住了資料結構書上哪些是穩定的,哪些不是穩定的,做起來應該可以輕鬆搞定。本文是針對老是記不住這個或者想真正明白到底為什麼是穩定或者...

穩定排序和不穩定排序

這幾天筆試了好幾次了,連續碰到乙個關於常見排序演算法穩定性判別的問題,往往還是多選,對於我以及和我一樣拿不準的同學可不是乙個能輕易下結論的題目,當然如果你筆試之前已經記住了資料結構書上哪些是穩定的,哪些不是穩定的,做起來應該可以輕鬆搞定。本文是針對老是記不住這個或者想真正明白到底為什麼是穩定或者不穩...