【问题标题】:rails 3... in this case two are two queries faster than one?rails 3 ...在这种情况下,两个查询比一个查询快吗?
【发布时间】:2011-02-06 15:51:17
【问题描述】:

我们将在我们网站的几乎每一次“点击”上执行此操作。托管在 Heroku,运行 Postgres。

非常常见的场景...我们模型中的一个方法获取匹配条件的记录的 COUNT 条以及匹配相同条件的最后一条记录。

在实际使用中,COUNT 通常小于 20。该表有大约 20 个字段,没有一个大于 200 个字符。

目前我做两个查询,n=widget.count(conditions) 然后我做 z=widget.last(conditions)

当然我也可以 allfound = widget.find(conditions) 然后得到 n=allfound.count 和 z=allfound.last。

哪个“更好”?权衡是什么? (有总是权衡,对吧?)

干杯! JP

【问题讨论】:

    标签: ruby-on-rails activerecord query-optimization


    【解决方案1】:

    我会坚持使用两个查询,因为:

    • 不要过早地优化 - 在您需要优化之前,坚持您需要做的事情,而不是(或看起来)最快的事情。
    • 如果表没有改变,您的 RDBMS 无论如何都可以缓存查询/结果,因此查询甚至不会触及磁盘(在任何一种情况下)。
    • 最好将两个单独的值缓存(例如缓存到 memcached)以将其减少为零查询,而不是将整个表缓存在 memcached 中。
    • 即使一个查询由于到数据库的往返时间而更快,Rails 实例化额外记录所花费的时间(只是为了让您丢弃其中的大部分)可能会补偿执行两次的时间查询。也就是说,对于两个查询,Rails 必须同时准备它们,这也需要时间。

    如果您真的想知道真正的答案,唯一确定的方法就是对其进行基准测试。创建一个执行基准测试的 Rake 任务,然后在 Heroku 上运行它。

    【讨论】:

      【解决方案2】:

      你检查过日志吗?您确定 Rails 在第二种情况下也不会进行 2 次查询吗?

      【讨论】:

      • 我想他的意思是:如果他做了.all 然后.size.last 你绝对可以做1个查询。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      相关资源
      最近更新 更多