關於mysql查詢最近一條記錄

關於mysql查詢最近一條記錄

最近項目中遇到須要查詢記錄當前時間最近的一條記錄的問題,開始感受無從下手,後來逐步發現了三種解決方案。html

下策——查詢出結果後將時間排序後取第一條

select * from a where time<="2017-03-29 19:30:36" order by time desc limit 1

這樣作雖然能夠取出當前時間最近的一條記錄,可是一次查詢須要將表遍歷一遍,對於百萬以上數據查詢將比較費時;limit是先取出所有結果,而後取第一條,至關於查詢中佔用了沒必要要的時間和空間;還有若是須要批量取出最近一條記錄,比方說:「一個訂單表,有用戶,訂單時間,金額,須要一次性查詢全部用戶的最近的一條訂單記錄」,那麼每一個用戶一次查詢就要作一次整表的遍歷,數據大的狀況下,時間將會以指數形式增加,不能投入實際使用。mysql

中策——查詢排序後group by

select * from ( select * from a where time<="2017-03-29 19:30:36" order by time desc ) group by user_id

後來發現使用group by 能夠根據group by 的參數列分組,但返回的結果只有一條,仔細觀察發現group by是將分組後的第一條記錄返回。時間在查詢後默認是順序排列,所以須要先將時間倒序排列,方可取出距離當前最近一條。sql

這樣查詢實際上仍是進行了兩次查詢,雖然時間上相比第一個方法有了質的飛躍,可是還能夠進一步優化。優化

上策——將max() 方法和group by結合使用

select *,max(time) from a where time<="2017-03-29 19:30:36" group by user_id

這句能夠理解爲將結果集根據user_id分組,每組取time最大一條記錄。這樣就很好的實現了批量查詢最近記錄,而且僅僅須要遍歷一次表,即便在數據量巨大的狀況下也能夠在很短的時間查出結果。spa

 

from:https://www.cnblogs.com/wwyz/p/6641895.htmlcode

相關文章
相關標籤/搜索