计算类别中的产品时响应时间短

Low response time when counting products in categories

我需要呈现大约 2500 个类别(还包括嵌套类别 - 使用祖先 gem)和每个类别中的产品数量。

类似于以下内容:

因此加载页面需要很长时间。我迭代 5 个列表(深度为 5 个级别的类别)并使用以下代码计算类别中的产品(它总是对当前类别的产品以及所有嵌套的产品求和):

<%= Product.includes(:category).where(:id => @filter_product_ids, categories: {:id => Category.find(root['id']).subtree_ids }).count %>

有什么办法可以加快速度吗?现在我只使用了 200 个类别和 10,000 个产品(预计 500,000 个),加载只有 10,000 个产品的页面需要 30 秒。

谢谢, 米罗斯拉夫

解决方案

缓存计数器:https://github.com/magnusvk/counter_culture

您需要查看 运行 数据库中的 SQL 并为这些列创建索引。您似乎正在对产品 table 进行 table 扫描;索引会大大加快速度。