我正在使用Mongoid处理一个非常大的,长时间运行的Rails monolith。我被要求找到并优化慢速运行的查询,我已经在Heroku的mLab插件的帮助下开始了。
此查询(某些列名称已编辑)出现为最慢的运行函数:
{
"status":"<val>",
"from":{"$regex":"<val>","$options":"<val>"},
"text":{"$regex":"<val>","$options":"<val>"},
"field_x":{"$gte":"<val>"},
"field_y":{"$gte":"<val>"},
"field_z":{"$gte":"<val>"}
}
mLab提供了一些改进慢速查询的建议,并且我已经添加了它建议的索引,但我想知道我是否可以更好地使Rails查询。它看起来像这样(型号名称已更改):
@reviews = object.reviews.active.and(:text.ne => nil, :text.ne => '').desc(:created_at)
@reviews += object.reviews.active.any_of({text: nil}, {text: ''}).desc(:created_at)
我没有编写此代码,但据我了解,它希望使用文本对评论进行优先排序,以便在没有文字的5星评价上方列出带有文字OMG, LIKE TOTALLY AMAZE-BALLZ
的5星评价。写这个更好,更有效吗?