我知道有两种方法可以通过 AR 在 Rails 中获取结果,这里有两个示例查询,它们返回相同的结果但执行不同的 SQL 查询。
一种)
where("created_at < ? and created_at > ?", week1, week2)
二)
where(:created_at => week1..week2)
第二个(除了更好看,恕我直言)还创建了一个BETWEEN
类型 SQL 查询,而第一个几乎是不言自明的。
哪一个表现更好,或者除了风格之外的任何其他原因更好?
我知道有两种方法可以通过 AR 在 Rails 中获取结果,这里有两个示例查询,它们返回相同的结果但执行不同的 SQL 查询。
一种)
where("created_at < ? and created_at > ?", week1, week2)
二)
where(:created_at => week1..week2)
第二个(除了更好看,恕我直言)还创建了一个BETWEEN
类型 SQL 查询,而第一个几乎是不言自明的。
哪一个表现更好,或者除了风格之外的任何其他原因更好?
我认为 B 是大多数人会选择的,因为他们编写的代码更少,根本不需要考虑SQL
查询。
对于性能,我认为应该是一样的。MySQL 只是提供了一种更好的方法来在范围值中执行 where 子句。
它会有点特定于 db ..因为 rails 会为它们生成这些查询
A) WHERE (created_at < '2012-05-29 13:14:50' and created_at > '2012-05-28 15:14:50')
B) WHERE (`questions`.`created_at` BETWEEN '2012-05-28 15:14:39' AND '2012-05-29 13:14:39')
:) 你不应该太担心......只要你使用 ActiveRecord
看看这个