Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 轨道3。。。在这种情况下,两个查询比一个查询快吗?_Ruby On Rails_Activerecord_Query Optimization - Fatal编程技术网

Ruby on rails 轨道3。。。在这种情况下,两个查询比一个查询快吗?

Ruby on rails 轨道3。。。在这种情况下,两个查询比一个查询快吗?,ruby-on-rails,activerecord,query-optimization,Ruby On Rails,Activerecord,Query Optimization,我们将在几乎每一个“点击”我们的网站上这样做。在Heroku主持,运行博士后课程 非常常见的情况。。。在我们的模型中,只有一个方法可以获得与某个条件匹配的记录数以及与同一条件匹配的最后一个记录数 在现实世界中,计数通常小于20。该表大约有20个字段,没有一个大于200个字符 目前我做两个查询,n=widget.count(条件),然后做z=widget.last(条件) 当然,我也可以做allfound=widget.find(conditions)然后得到n=allfound.count和z=

我们将在几乎每一个“点击”我们的网站上这样做。在Heroku主持,运行博士后课程

非常常见的情况。。。在我们的模型中,只有一个方法可以获得与某个条件匹配的记录数以及与同一条件匹配的最后一个记录数

在现实世界中,计数通常小于20。该表大约有20个字段,没有一个大于200个字符

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

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

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

干杯!
你检查日志了吗?您确定Rails在第二种情况下不会同时执行两个查询吗?

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

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

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

我认为他的意思是:如果他执行了
。所有
,然后
。大小
。最后一个
你肯定可以作为一个查询来执行。