1. 程式人生 > >mysql排序,同樣的sql,mysql 每次查詢結果順序不一致

mysql排序,同樣的sql,mysql 每次查詢結果順序不一致

簡單 查詢 排序。 mys ava res 分法 算法 ont

  某天項目中寫了一句排序sql,但是發現每次執行的結果都不同,就是排序順序不一樣。

select * from table_tmp order by printStatus asc,dealTime desc

  查詢了很多資料,也沒找到一個比較確認的理由,只是較多人認為是由於緩存的存在。引用一下別人的回答:

  根數據庫系統的算法有關,早期版本的算法是自然的多個線程二分法,那個線程先查到滿足條件的數據就先輸出出來,這樣就是亂序的,後期經過改進按照主鍵自然排序輸出。如果order by的值相同,一般是按自然排序,就是首個字符的字母或漢字的發音的首字母的s排序。order by的字段自然排序,如果你的order by 字段是resort,resort值相同的情況下,是可能有兩種結果,一種就是你列出的隨機排序,還有一種就是按主鍵來排序。這個問題不是固定的,還可能跟你的服務器性能都有關系,如果內存足夠大,執行mysql的時候會提供足夠大的緩沖池,也可能會出現另一種結果。所以很有可能是因為緩存的存在,在mysql客戶端存在緩存,然後每一次查詢都走緩存所以他的順序不會發生改變。然而執行java程序順序不一致,可能就是因為沒有走緩存,每一次都是實時查詢。也許java程序的這種結果本身就具有更多的可靠性。

  

  知道問題的原因,解決就很簡單了,不是由於order by後面的值相同才出現問題嗎,那就再加個排序字段,比如id什麽的;

select * from table_tmp order by printStatus asc,dealTime desc,id asc

mysql排序,同樣的sql,mysql 每次查詢結果順序不一致