Kaminari:搜索查询的页数统计性能

时间:2015-02-17 12:36:47

标签: postgresql kaminari

我们已将Kaminari用于分页记录。我们已经攻击了total_count方法,因为在2米+记录后,总计数非常慢。

def total_count
  @_hacked_total_count || (@_hacked_total_count = self.connection.execute("SELECT (reltuples)::integer FROM pg_class r WHERE relkind = 'r' AND relname ='#{table_name}'").first["reltuples"].to_i)
end

这将返回表中记录总数的大致计数。

但是,当存在搜索查询时,该数字完全无关紧要。

我正在寻找一种快速返回搜索查询号码的方法。 (不需要完全准确 - 但需要有意义(即有些与搜索查询相关

请建议我们获取上述记录总数的方法是否正确。

P.S - 我们使用Postgres作为我们的数据库提供者,使用Rails作为Web开发框架。

1 个答案:

答案 0 :(得分:2)

经过几天的磕磕绊绊之后,我通过使用EXPLAIN查询然后提取计数行数来做到这一点。

以下是我写的代码段:

query_plan = ActiveRecord::Base.connection.execute("EXPLAIN <query>").first["QUERY PLAN"]
query_plan.match(/rows=(\d+)/)[1].to_i # returns the rows count

有了这个,我可以安全地删除reltuples查询。