在我的rails3.2.x应用程序中,有一个名为pdata的表,目前有150多万条记录(mysql),而且每天都在增长。此表正在收集测量结果并不断更新。每一个新的度量要么是一个新的pdata记录,要么更新一个现有的pdata记录。所以我知道
pdata = Pdata.find_or_initialize_by_a_id_and_b_id_and_timestamp(a_id,b_id,timestamp)
其中a和b基本上是不同的模型,每个记录所属的模型由测量数据传递。每天大约有500个测量值需要以这种方式更新或新建。现在我发现 find_or_initialize_by
通话时间约为0.7秒!有人知道一种更快的方法来查找或初始化吗?有人知道为什么这个电话要花这么长时间吗?
谢谢,安德烈亚斯
1条答案
按热度按时间093gszye1#
在这种情况下,在表上创建一个索引,索引中包含要处理的列,但要记住顺序很重要,首先使用最快缩小记录数的列。
创建迁移并使用字段添加索引:
考虑到前面提到的规则,更改列的顺序。