如何高效獲取一對(duì)多關(guān)系中關(guān)聯(lián)表的最新記錄?

如何高效獲取一對(duì)多關(guān)系中關(guān)聯(lián)表的最新記錄?

如何高效解決一對(duì)多關(guān)系中讀取最新記錄的問(wèn)題?

當(dāng)需要從一對(duì)多關(guān)系表中獲取關(guān)聯(lián)表的最新記錄時(shí),直接使用子查詢往往會(huì)影響性能。以下提供了一種更高效的解決方案:

通過(guò)內(nèi)部連接實(shí)現(xiàn),首先對(duì)關(guān)聯(lián)表按時(shí)間降序排序,然后對(duì)排序后的結(jié)果進(jìn)行分組,最后再按照時(shí)間降序排序。此方案有效避免了子查詢帶來(lái)的性能開(kāi)銷(xiāo)。

完整的 sql 查詢?nèi)缦拢?/p>

SELECT     r.air_conditioner_id,     r.curr_temp,     r.curr_power,     r.time_millis FROM     air_conditioner_record r, (     SELECT         air_conditioner_id,         max( time_millis ) max_time     FROM         air_conditioner_record     WHERE         time_millis <= REPLACE(unix_timestamp(now(3)),'.','')     GROUP BY         air_conditioner_id ) r2 WHERE     r2.air_conditioner_id = r.air_conditioner_id AND r2.max_time = r.time_millis

這個(gè)查詢通過(guò)內(nèi)部連接將設(shè)備記錄按時(shí)間降序分組,并匹配設(shè)備表中的設(shè)備 id。最終,可以高效地獲取設(shè)備表的相關(guān)信息以及最近時(shí)間處的設(shè)備記錄。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊6 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員