亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-30 17:25:20 來源:腳本之家 閱讀:1611 作者:一只阿木木 欄目:MySQL數據庫

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

select * from a 
where create_time<="2017-03-29 19:30:36" 
order by create_time desc
limit 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 a
where 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 = 254
order by create_time desc
limit 1

中策:

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

上策:

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开远市| 北碚区| 建平县| 曲松县| 酉阳| 咸阳市| 日喀则市| 仪陇县| 临沭县| 宁晋县| 安阳市| 武威市| 庆阳市| 新河县| 饶阳县| 班戈县| 海盐县| 武宣县| 徐汇区| 喀什市| 马尔康县| 巴彦县| 武鸣县| 天津市| 博客| 南京市| 响水县| 靖安县| 克什克腾旗| 景洪市| 疏勒县| 格尔木市| 安顺市| 东平县| 新民市| 凤庆县| 汤阴县| 家居| 威信县| 鄂托克前旗| 余庆县|