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

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

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

2024-07-25 19:08:26
字體:
供稿:網(wǎng)友

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

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

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

中策——查詢排序后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

后來發(fā)現(xiàn)使用group by 可以根據(jù)group by 的參數(shù)列分組,但返回的結(jié)果只有一條,仔細(xì)觀察發(fā)現(xiàn)group by是將分組后的第一條記錄返回。時間在查詢后默認(rèn)是順序排列,因此需要先將時間倒序排列,方可取出距離當(dāng)前最近一條。

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

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

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

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

 擴展:

現(xiàn)在有一張資產(chǎn)設(shè)備表:base_assets_turn

查詢資產(chǎn)的最新保管人

注:假設(shè)資產(chǎn)編號   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;

上策:

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

以上所述是小編給大家?guī)淼腗ysql查詢最近一條記錄的sql語句(優(yōu)化篇),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言!


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 五家渠市| 新建县| 广西| 介休市| 平罗县| 肇庆市| 大方县| 尤溪县| 北川| 喀喇| 长丰县| 金昌市| 金平| 江华| 丰都县| 都匀市| 扎囊县| 吉木乃县| 徐州市| 云和县| 蓬安县| 安远县| 万安县| 荣昌县| 沁水县| 名山县| 宁陕县| 浮山县| 宿州市| 苍梧县| 吉隆县| 阳山县| 渝北区| 博兴县| 尤溪县| 涪陵区| 红原县| 杂多县| 中阳县| 罗平县| 全椒县|