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中增加最新記錄的環境以提高查詢效率
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330005.html
標籤:其他
