【发布时间】:2015-05-18 20:27:00
【问题描述】:
如何检查活动记录中是否只有一条记录? 我可以的
@items.count == 1
但最近我注意到它需要 90 毫秒,而其他查询需要 20 毫秒。 有时,某些事情的计数方法需要很长时间。 那么有没有只检查 1 的方法?
@items.only_one_exist?
【问题讨论】:
-
这可能更快,
@items.count_by_sql(SELECT * FROM [table] LIMIT 2)它会选择 1 或 2(或 0),并且会比实际计算所有内容更快地得到结果。 -
其实
@items.take(2).count是你得到结果后应该使用的。 -
所以,我尝试了 take(2),sql 看起来是一样的。还有限制(2)。我在想哪个更好
-
我不确定Ruby是如何决定是否再次查询与查看获得的结果的。这是我在执行类似
@countTest = Clm.where("dcity = ?", 'Chicago')的操作时看到的 - 在控制器中,<%= @countTest.inspect %> <%= @countTest.count %> <%= @countTest.take(2).count %>- 在视图中。结果是记录 158827 和 2。以及 SQL 时间Clm Load (1080.7ms) SELECT 'clms'.* FROM 'clms' WHERE (dcity = 'Chicago')(70.0ms) SELECT COUNT(*) FROM 'clms' WHERE (dcity = 'Chicago')Clm Load (1.0ms) SELECT 'clms'.* FROM 'clms' WHERE (dcity = 'Chicago') LIMIT 2 -
我查看了
.take与.limit,.take返回一个数组,而.limit返回一个关系。碰巧.count两者都存在,至少在这种情况下做同样的事情。我不知道哪个会更快 - 一方面您首先将关系转换为数组,另一方面 activerecord.count可能比数组.count慢(或.length可能应该使用。)
标签: ruby-on-rails ruby-on-rails-3 activerecord