【问题标题】:Low response time when counting products in categories按类别计算产品时响应时间短
【发布时间】:2016-02-13 15:37:12
【问题描述】:

我需要渲染大约 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

【问题讨论】:

    标签: ruby-on-rails performance count ancestry


    【解决方案1】:

    您需要查看针对数据库运行的 SQL 并为这些列创建索引。看起来您正在对 products 表进行表扫描;索引会大大加快速度。

    【讨论】:

    • 谢谢安迪。实际上,我查看了控制台并看到了很多 SQL 查询,所以我正在寻找一种方法来减少它,幸运的是,出于我的目的,我找到了一个很棒的解决方案缓存计数器 gem (github.com/magnusvk/counter_culture)。现在它运行得更快了。
    • 缓存也绝对是个好主意;当您实际上必须进行 SQL 查询时,适当的索引也会提高性能。
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多