我们在Rails 3应用程序中有一个SQL查询。
@followers
返回current_user
后的用户ID数组。
@followers = current_user.following
@feed_items = Micropost.where("belongs_to_id IN (?)", @followers)
有更有效的方法来执行此查询吗?
答案 0 :(得分:3)
您拥有的查询无法再进行优化。通过向belongs_to_id
添加索引可以加快速度(无论如何你都应该对外键执行此操作),但这不会改变实际的查询。
有一种更简洁的方法来编写IN
查询:
Micropost.where(:belongs_to_id => @followers)
其中@followers
是belongs_to_id
的值数组。
答案 1 :(得分:1)
对我来说很好看。
但是,如果您在代码中寻找真正的最小字符数,则可以更改:
Micropost.where("belongs_to_id IN (?)", @followers)
到
Micropost.where("belongs_to_id = ?", @followers)
更容易阅读。
Rails会看到数组并执行IN
。
与往常一样,ruby语言的主要目标是可读性,所以很少有改进有帮助。
至于查询是无效的,你可以检查该字段的索引 它们往往对每个数据库更具体一点 - 你只指定了通用的sql。在你的问题中。