在我的Rails 3.2.x应用程序中,有一个名为Pdata的表,当前有150万条记录(mysql),并且每天都在增长。该表正在收集测量结果并不断更新。每个新的度量要么是新的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.7s!有人知道更快的查找或初始化方式吗?有谁知道为什么这个电话要花这么长时间?谢谢,安德烈亚斯
最佳答案
对于这种情况,请在表上使用您要处理的列创建索引,但要记住顺序很重要,请首先使用该列,该列将以最快的速度缩小记录数。
创建迁移并在字段中添加索引:
def change
add_index :p_datas, [:a_id, :b_id, :timestamp]
end
考虑到前面提到的规则,请更改列的顺序。
关于mysql - 如何在Rails中加快find_or_initialize?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51722130/