有效查询好友数量?

时间:2013-06-11 14:37:14

标签: ruby-on-rails ruby

我目前首先获得某个用户的所有朋友,然后将数组的大小作为朋友的数量。我担心的是,因为每次我从数据库中检索所有朋友信息时,它可能(或显然)效率低下。所以我想知道是否有一种方法可以在不获取任何其他信息的情况下有效地查询某个用户的朋友数量?

1 个答案:

答案 0 :(得分:3)

如果您的关系声明正确,您应该能够user.friends.count生成数据库级别的计数。

在我的控制台中查看生成的SQL查询Drug has_many :detailsDrugDetail belongs_to :drug):

irb(main):003:0> Drug.first.details
  Drug Load (0.7ms)  SELECT "drugs".* FROM "drugs" LIMIT 1
  DrugDetail Load (1.9ms)  SELECT "drug_details".* FROM "drug_details" WHERE "drug_details"."drug_id" = 1771
=> []

irb(main):004:0> Drug.first.details.count
  Drug Load (0.7ms)  SELECT "drugs".* FROM "drugs" LIMIT 1
   (0.6ms)  SELECT COUNT(*) FROM "drug_details" WHERE "drug_details"."drug_id" = 1771
=> 0

irb(main):006:0> Drug.first.details.to_a.size
  Drug Load (2.1ms)  SELECT "drugs".* FROM "drugs" LIMIT 1
  DrugDetail Load (0.5ms)  SELECT "drug_details".* FROM "drug_details" WHERE "drug_details"."drug_id" = 1771
=> 0

在你的情况下,如果你有这样的关系:

User has_many :friends
Friend belongs_to :user

然后,这应该在数据库级别执行,并且比第一段代码快:

User.first.friends.count