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
查询。
我们已使用 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
查询。