使用ActiveRecord解释COUNT查询

时间:2015-09-29 02:19:17

标签: mysql ruby-on-rails performance activerecord count

我想做以下事情:

Post.count.explain # doesn't work

此操作失败,因为EXPLAIN是关系上的方法,Post.count不是关系。它只是一个常规整数,是查询的结果。那么计数查询怎么能被解释?

3 个答案:

答案 0 :(得分:5)

这是一个生成完全相同的SQL查询的表单,但返回一个关系来调用explain

Post.select('count(*)').explain 

两者都生成SQL

 SELECT COUNT(*) FROM `posts`

...所以查询计划应该是相同的。

答案 1 :(得分:0)

COUNT不应该影响查询计划,因为它唯一的区别是告诉数据库获取行数据,但无论如何都需要找到行,不管是否有COUNT。

答案 2 :(得分:0)

ActiveRecord::Relation#explain,我们可以使该方法接受一个块。

module ExplainBlock
  def explain_block(&block)
    exec_explain(collecting_queries_for_explain { instance_exec(&block) })
  end
end

ActiveRecord::Relation.include(ExplainBlock)

然后Post.all.explain_block { count }