2017-05-02 75 views
0

我有一個很大的用戶數據表。此表選擇,分組和訂購數據的速度很慢,它具有dateuser_id主鍵。 所以我想創建一個「大表副本」,但只是每個用戶的最新數據。保持MySQL表更新

我嘗試創建新的副本表,其中只是user_id主鍵。然後在重複密鑰更新

我應該使用觸發器?如何最好的方式來做到這一點?

+0

兩者都是可行的解決方案。哪一個使用?那麼,這取決於你的要求。 – Shadow

+0

我的要求是創建表格的重複和保持數據更新的最佳方式 –

+0

這只是您的要求的一部分。你需要實時更新副本嗎?只是定期?你的系統能否真正支持實時同步?沒有評估這些問題,無法回答你的問題。 – Shadow

回答

0

您可以使用ON DUPLICATE KEY UPDATE使用INSERT語句從大用戶數據表中選擇所有數據,從而創建初始重複表。

然後,您需要一個循環作業來運行相同的INSERT語句以更新副本表,或者在源表(大用戶數據表)上觸發一個觸發器。

觸發器解決方案將包含一個ON INSERT觸發器,並且如果表也被更新,您還需要一個ON UPDATE觸發器,並且如果應該處理DELETES,則還需要一個ON DELETE觸發器。

的解決方案之間的差異是

  • 引發劑溶液將保持複製表實時更新, 但如果在源表中的很多活動那麼這可以 有性能的影響,
  • 重複性作業解決方案將導致不是 的副本表始終保持最新狀態,但可以在非高峯時段運行。

我有數據庫,我使用兩種解決方案,首選觸發器版本作爲默認值,並根據需要切換到定期作業解決方案。

示例:我使用定期作業解決方案,將夜間作業中的數天數據彙總到聚合表中,因爲彙總數據僅在我有全天數據的情況下才會使用。