如何高效解決一對(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)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END