主頁(yè) > 知識(shí)庫(kù) > Mysql查詢(xún)最近一條記錄的sql語(yǔ)句(優(yōu)化篇)

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

熱門(mén)標(biāo)簽:地圖標(biāo)注賺錢(qián)真假 遵義地圖標(biāo)注app 商家地圖標(biāo)注哪個(gè)好 深圳 陜西400電話如何申請(qǐng) 德惠市地圖標(biāo)注 外呼系統(tǒng)從哪買(mǎi) 合肥營(yíng)銷(xiāo)外呼系統(tǒng)收費(fèi) 承德電腦地圖標(biāo)注

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

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

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

中策——查詢(xún)排序后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

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

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

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

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

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

 擴(kuò)展:

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

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

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

上策:

那么上策該如何書(shū)寫(xiě)呢,歡迎留言!

以上所述是小編給大家?guī)?lái)的Mysql查詢(xún)最近一條記錄的sql語(yǔ)句(優(yōu)化篇),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言!

您可能感興趣的文章:
  • 對(duì)MySql經(jīng)常使用語(yǔ)句的全面總結(jié)(必看篇)
  • Mysql常用sql語(yǔ)句匯總
  • MySQL 使用DQL命令查詢(xún)數(shù)據(jù)的實(shí)現(xiàn)方法
  • 整理MySql常用查詢(xún)語(yǔ)句(23種)
  • Mysql學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)檢索語(yǔ)句DQL大全小白篇

標(biāo)簽:三門(mén)峽 巴中 南陽(yáng) 新余 揚(yáng)州 贛州 貴州 商丘

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mysql查詢(xún)最近一條記錄的sql語(yǔ)句(優(yōu)化篇)》,本文關(guān)鍵詞  Mysql,查詢(xún),最近,一條,記錄,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Mysql查詢(xún)最近一條記錄的sql語(yǔ)句(優(yōu)化篇)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Mysql查詢(xún)最近一條記錄的sql語(yǔ)句(優(yōu)化篇)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章