【发布时间】:2013-08-26 12:34:11
【问题描述】:
每个页面加载我都有几个这样的请求:
SELECT COUNT(*) FROM `impressions` WHERE `impressions`.`impressionable_id` IN (229) AND `impressions`.`impressionable_type` = 'Document' AND (YEAR(created_at) = 2013 && MONTH(created_at) = 8 && DAY(created_at) = 12)
SELECT COUNT(*) FROM `impressions` WHERE `impressions`.`impressionable_id` IN (229) AND `impressions`.`impressionable_type` = 'Document' AND (YEAR(created_at) = 2013 && MONTH(created_at) = 8 && DAY(created_at) = 13)
SELECT COUNT(*) FROM `impressions` WHERE `impressions`.`impressionable_id` IN (229) AND `impressions`.`impressionable_type` = 'Document' AND (YEAR(created_at) = 2013 && MONTH(created_at) = 8 && DAY(created_at) = 14)
SELECT COUNT(*) FROM `impressions` WHERE `impressions`.`impressionable_id` IN (229) AND `impressions`.`impressionable_type` = 'Document' AND (YEAR(created_at) = 2013 && MONTH(created_at) = 8 && DAY(created_at) = 15)
我想减少服务器上的负载,因此我试图将其转换为counter_cache 解决方案。由于我试图计算复杂的关系,我需要一些帮助来设计它。这是获取计数的查询:
Impression.where(:impressionable_id => component.publications.where(:document_id => document).first.id).count
我应该将counter_cache 列放在哪里?我应该如何编写迁移? Component 和 Document 通过 Publications 处于 has_many 关系中。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 counter-cache