MySql一對多,查詢最新資料
阿新 • • 發佈:2021-10-21
ySql一對多,查詢最新資料
場景1:比如有一張學生資訊表,還有一張日誌表,每次修改了學生資訊便會在日誌表中插入一條更新日誌,現在需要查詢出所有學生的最新的一條更新記錄
SELECT log. * FROM `system_log` AS log INNER JOIN `student` AS t ON log. student_id = t. student_id INNER JOIN ( SELECT student_id, max( create_dae ) AS createDate FROM system_log GROUP BY student_id ) `maxTab` ON log. student_id = maxTab. student_id AND `log`. create_dae = `maxTab`. createDate WHERE `log`. student_id IS NOT NULL AND `log`. student_id != '' AND t. student_id IS NOT NULL AND t. student_id != '' ORDER BY `log`. create_dae DESC LIMIT 100
-
- 先通過子查詢查詢出來 log表中 每個student對應的最大的建立時間,也就是最新的那一條日誌記錄,是需要根據student_id進行分組查詢的,這樣子就可以查詢出來每一個學生的最新的日誌記錄
- 2.通過 inner join 進行表關係關聯,log表和student表進行關聯,查詢出每一個學生對應的所有日誌,在於子查詢出來的臨時表進行關聯,進而篩選出每一個學生對應的最新的一條日誌記錄,最後進行倒序排列和分頁造作即可
場景二:如果這條sql查詢語句已經無法在進行優化的情況下,應該如何再進行效率的提高?
- 修改表結構,如果資料量不大的情況下,可以每次更新日誌的時候將最新的一條日誌結構同步更新到student表中即可
- 增加表,可以新增一張表專門用來儲存最新的日誌記錄,每次插入日誌表的時候,對該表進行同步更新
場景三:優化遇到瓶頸了,還有其他優化方案嗎?
- 引入Redis快取:每次插入日誌表的時候,向redis中增加最新記錄的環境以提高查詢效率