2014-10-19 56 views
1

我有一個Notification模型。任何時候,某些動作如Comment,Like,Mention,Follow都會發生此表中獲取的單個記錄添加到它。這張表現在長達數百萬條記錄。我擁有的唯一索引是user_id - 這一直很重要,因爲我向current_user顯示通知。有很多has_one關聯的模型在刪除記錄時非常慢

在這些相關模型,我包括以下行

has_one :notification, dependent: :destroy 

的問題是,所有這些行動都是可逆的,所以每當有人,比如說,unlikes,我需要摧毀的相關通知。

因爲這樣的通知#銷燬行動現在非常慢,往往以> 10秒!我敢肯定,這是因爲每次破壞發生,它必須看起來像like_idcomment_id,或mention_id外鍵

我可以在所有這些記錄添加索引,但我擔心給有多大此表是多久它得到插入和刪除。我應該擔心嗎?有沒有更好的方法來構造這個?

+0

心理提示:':destroy'運行回調,':delete'不運行。 – Substantial 2014-10-19 07:28:25

回答

0

可能性正在考慮翻轉關係,使用belongs_to而不是has_one,因此您只依賴該表上的主鍵。

否則,你應該真的有那些指數;它不應該是一個太大的負擔。如果你不這樣做,你會受到打擊;它甚至可能會在這些刪除操作上鎖定數據庫。

使用SHOW TABLE STATUS可查看索引大小,以瞭解您可能正在查看的內容。