在我的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.7秒!有人知道更快的查找或初始化方法吗?有谁知道为什么这个电话要花这么长时间?
谢谢安德里亚斯
答案 0 :(得分:1)
在这种情况下,请使用您要处理的列在表上创建索引,但要记住顺序很重要,请首先使用该列,该列将以最快的速度缩小记录数。
创建迁移并在字段中添加索引:
def change
add_index :p_datas, [:a_id, :b_id, :timestamp]
end
请牢记前面提到的规则,更改列的顺序。