2014-10-19 55 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可查看索引大小,以了解您可能正在查看的内容。