9

我想知道哪种方法返回记录最快。

Class.where(:type => 4).first
Class.find(:first, :conditions => ["type = ?", 4])

执行完全一样吗?

4

2 回答 2

10

假设您不关心订单,最高效的是使用find_by

Class.find_by(type: 4)

来自https://github.com/rubocop-hq/rails-style-guide/issues/76

此方法已添加到 Rails 4 中,其定义如下:

def find_by(*args)
 where(*args).take
end

因此,takefirst您的记录顺序不同。first将根据主键的顺序返回第一条记录,而take只会返回数据库首先输出的任何内容。

因此,虽然使用where().take等同于find_by并选择是否使用其中一个是品味问题,但where().first区别在于find_by微妙且不那么明显。

于 2019-06-14T08:41:01.957 回答
4

两者都会产生相同的查询。

根据最新信息,在 Rails 3.1 下,传入 :conditions 将被弃用。

因此,现在,执行查询的最佳方法是使用:

Class.where(:type => 4).first
于 2012-08-27T03:48:34.383 回答