0
  @users = Hash.new
  @users[:count] = User.count(:all, :joins => my_join, :conditions => my_conditions)
  @users[:data] = User.find(:all, :joins => my_join, :conditions => my_conditions)

或者

  @users = Hash.new
  @users[:data] = User.find(:all, :joins => my_join, :conditions => my_conditions)
  @users[:count] = @users[:data].count

似乎第一个选项包含两个数据库查询(从我读到的内容很昂贵),而在第二个选项中,我们只进行一个数据库查询并在 Ruby 级别进行计数工作。

哪个效率更高?

4

1 回答 1

3

第二个更好,因为就像您说的那样,它保存了数据库查询。

ps

如果你使用 Rails 3 中引入的一些新的 finder 方法,请小心,然后调用countafter 会触发COUNT(*)查询:

users = User.where(...)    # SELECT "users".* FROM "users" WHERE ...
users_count = users.count  # SELECT COUNT(*) FROM "users" WHERE ...

为防止这种情况,您可能需要调用size

users = User.where(...)   # SELECT "users".* FROM "users" WHERE ...
users_count = users.size  # No database query
于 2013-07-02T19:20:38.877 回答