如何在rails中加速查找\或\初始化?

zf2sa74q  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(312)

在我的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秒!有人知道一种更快的方法来查找或初始化吗?有人知道为什么这个电话要花这么长时间吗?
谢谢,安德烈亚斯

093gszye

093gszye1#

在这种情况下,在表上创建一个索引,索引中包含要处理的列,但要记住顺序很重要,首先使用最快缩小记录数的列。
创建迁移并使用字段添加索引:

def change
  add_index :p_datas, [:a_id, :b_id, :timestamp]
end

考虑到前面提到的规则,更改列的顺序。

相关问题