我的Post
模型has_many :comments
。它有一个带有这个查询的搜索方法:
joins{comments.outer}.where{ (title.like_any search_words) | (body.like_any search_words) | (comments.body.like_any search_words) }
这给出了所需的记录:“查找标题、正文或其任何评论正文(如果有评论)与任何 search_words 匹配的所有帖子”。问题是:这个查询需要 8 秒!如果我将它分成 2 个查询,我可以让它在几毫秒内运行:
( where{ (title.like_any search_words) | (body.like_any search_words) }
+ joins{:comments}.where{ comments.body.like_any search_words } ).uniq
这给出了相同的结果,只是要快得多。但它强制ActiveRecord::Relation
进入一个数组,所以我不能做类似.includes
和.pagination
之后的事情。我真的很想将结果保留为ActiveRecord::Relation
,但我希望它更快。你会怎么做?
PS:我在这里使用 Squeel。
谢谢。