【问题标题】:How do I check the database if it has exactly one record?如果数据库只有一条记录,我如何检查它?
【发布时间】: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


【解决方案1】:

您所拥有的count 方法是唯一的方法,是的 - 它通常比选择花费更长的时间,因为计算总数涉及更多步骤。

【讨论】:

  • 你能详细说明一下吗?
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2011-08-15
  • 2020-01-27
  • 1970-01-01
  • 2021-09-04
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多