Kaminari:搜索查询的页数性能

Kaminari : page count performance for search query

我们已使用 Kaminari 对记录进行分页。我们破解了 total_count 方法,因为在 2m + 记录后给出总计数非常慢。

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

这 return 是 table 中总记录的近似计数,这很好。

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

我也在寻找一种快速方法来 return 一些搜索查询的数字。 (不需要完全准确——但需要有意义(即与搜索查询有点相关)

如果我们上面提到的获取记录总数的方法不正确,请提出建议。

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

在偶然发现这几天后,我通过使用 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 查询。