Rails最快的方式来获取表记录计数

时间:2017-04-26 01:36:36

标签: ruby-on-rails postgresql activerecord

我在user数据库中有一个Postgresql表,如果运行User.count,则需要150ms才能获得结果。对我们来说太慢了。理想情况下,返回结果需要不到10毫秒。有没有办法在模型级别缓存sql结果?像

这样的东西
def self.total_count
  User.count.cached # that's my imagination
end

2 个答案:

答案 0 :(得分:8)

在我看来,有几种方法可以解决这个问题 -

  1. 您可以使用另一个表,通过在添加/删除用户时或以频繁的时间间隔递增计数来存储用户总数的计数。
  2. 如果你的桌子非常大而精确度不是最重要的,你也可以看看Postgres' COUNT ESTIMATE查询。

    SELECT reltuples AS approximate_row_count FROM pg_class WHERE relname = 'users';

答案 1 :(得分:0)

您应该查看counter_cache。如果您的用户属于另一个模型http://guides.rubyonrails.org/association_basics.html

,它会很有用