這兩天由於一位實習生同事回學校答辯,因此我來跟進他之前開發的功能進行測試,測試反饋上來這么一個問題:
也就是說下面這兩條sql查詢出來的數據前10條的數據不一樣。
select * from table WHERE display_status = '1' order by update_time desc LIMIT 20; select * from table WHERE display_status = '1' order by update_time desc LIMIT 10;
查看執行計划如下:
可知,sql是先進行條件過濾,然后進行排序,最后進行limit,按此邏輯,limit 10和limit 20的前10條數據順序應該是一模一樣的,但根據結果來看順序發生了變化,百思不得解。
最后觀察數據發現:
很多數據的update_time字段值是一樣的,突然恍然大悟,應該是因為時間值一樣導致排序的時候順序會出現隨機變化。問題解決。
以后再遇到排序問題,不要總想着是不是數據庫內部原因,很有可能是數據的原因導致!!