国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql查詢最近一條記錄的sql語句(優化篇)

2024-07-24 12:50:10
字體:
來源:轉載
供稿:網友

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

select * from a where create_time<="2017-03-29 19:30:36" order by create_time desclimit 1

這樣做雖然可以取出當前時間最近的一條記錄,但是一次查詢需要將表遍歷一遍,對于百萬以上數據查詢將比較費時;limit是先取出全部結果,然后取第一條,相當于查詢中占用了不必要的時間和空間;還有如果需要批量取出最近一條記錄,比方說:“一個訂單表,有用戶,訂單時間,金額,需要一次性查詢所有用戶的最近的一條訂單記錄”,那么每個用戶一次查詢就要做一次整表的遍歷,數據大的情況下,時間將會以指數形式增長,不能投入實際使用。

中策——查詢排序后group by

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

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

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

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

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

這句可以理解為將結果集根據user_id分組,每組取time最大一條記錄。這樣就很好的實現了批量查詢最近記錄,并且僅僅需要遍歷一次表,即使在數據量巨大的情況下也可以在很短的時間查出結果。

 擴展:

現在有一張資產設備表:base_assets_turn

查詢資產的最新保管人

注:假設資產編號   ASSETS_ID=254

下策:

select * from base_assets_turn where ASSETS_ID = 254order by create_time desclimit 1

中策:

select * from ( select * from base_assets_turn where ASSETS_ID = 254order by create_time desc) tt GROUP BY tt.ASSETS_ID;

上策:

那么上策該如何書寫呢,歡迎留言!

以上所述是小編給大家帶來的Mysql查詢最近一條記錄的sql語句(優化篇),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言!

您可能感興趣的文章:

分析Mysql表讀寫、索引等操作的sql語句效率優化問題MySQL根據某一個或者多個字段查找重復數據的sql語句PHP獲取MySQL執行sql語句的查詢時間方法Mysql 根據一個表數據更新另一個表的某些字段(sql語句)MySQL 截取字符串函數的sql語句完美解決mysql in條件語句只讀取一條信息問題的2種方案使用SQL語句查詢MySQL,SQLServer,Oracle所有數據庫名和表名,字段名提升MYSQL查詢效率的10個SQL語句優化技巧一條sql語句完成MySQL去重留一MySQL語句整理及匯總介紹
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青田县| 会昌县| 仪征市| 长海县| 连州市| 新泰市| 遂溪县| 张家界市| 项城市| 英超| 铜鼓县| 阳信县| 淮阳县| 崇明县| 武川县| 宣恩县| 金乡县| 元谋县| 长沙市| 沧州市| 兴仁县| 博爱县| 衢州市| 通化市| 隆德县| 邵武市| 琼海市| 丹凤县| 陵水| 辽宁省| 涿鹿县| 故城县| 澳门| 晴隆县| 克拉玛依市| 虹口区| 鹤峰县| 社会| 东安县| 荣成市| 辽源市|