我想知道哪种方法返回记录最快。
Class.where(:type => 4).first
Class.find(:first, :conditions => ["type = ?", 4])
执行完全一样吗?
我想知道哪种方法返回记录最快。
Class.where(:type => 4).first
Class.find(:first, :conditions => ["type = ?", 4])
执行完全一样吗?
假设您不关心订单,最高效的是使用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
因此,
take
与first
您的记录顺序不同。first
将根据主键的顺序返回第一条记录,而take
只会返回数据库首先输出的任何内容。因此,虽然使用
where().take
等同于find_by
并选择是否使用其中一个是品味问题,但where().first
区别在于find_by
微妙且不那么明显。
两者都会产生相同的查询。
根据最新信息,在 Rails 3.1 下,传入 :conditions 将被弃用。
因此,现在,执行查询的最佳方法是使用:
Class.where(:type => 4).first