MySql一對多,查詢最新數據


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
    1. 先通過子查詢查詢出來 log表中 每個student對應的最大的創建時間,也就是最新的那一條日志記錄,是需要根據student_id進行分組查詢的,這樣子就可以查詢出來每一個學生的最新的日志記錄
  • 2.通過 inner join 進行表關系關聯,log表和student表進行關聯,查詢出每一個學生對應的所有日志,在於子查詢出來的臨時表進行關聯,進而篩選出每一個學生對應的最新的一條日志記錄,最后進行倒序排列和分頁造作即可

場景二:如果這條sql查詢語句已經無法在進行優化的情況下,應該如何再進行效率的提高?

  • 修改表結構,如果數據量不大的情況下,可以每次更新日志的時候將最新的一條日志結構同步更新到student表中即可
  • 增加表,可以新增一張表專門用來存儲最新的日志記錄,每次插入日志表的時候,對該表進行同步更新

場景三:優化遇到瓶頸了,還有其他優化方案嗎?

  • 引入Redis緩存:每次插入日志表的時候,向redis中增加最新記錄的環境以提高查詢效率


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM