现在我有一个名为 Campaigns 的表,它有很多 Hits,如果我打电话说:
Campaign.find(30).hits
这需要 4 秒或 4213 毫秒。
如果我改为调用它:
广告系列 = Campaign.find(30) 广告系列点击数
它是否仍然加载所有点击数,然后计数?或者它是否看到我正在计数并避免加载所有点击?(目前是 300,000+ 行)。
我试图找出一种聪明的方法来加载/计算我的点击量。我正在考虑向我的 Campaign.rb 模型添加一个方法,例如:
def self.total_hits find :first, :select => 'COUNT(id) as hits', :conditions => ["campaign_id = ?", self.id] 结尾
我知道查询不会从hits
表中加载,但这只是从自制查询中计算它的一个示例,与 Ruby on Rails 为我做这件事相反。
这个 memcache 查询会更有效吗?(我让它运行,但似乎没有更好/更快/更慢,只是速度相同。)
def self.hits Rails.cache.fetch("Campaign_Hits_#{self.campaign_id}", :expires_in => 40) { find(:first, :select => 'COUNT(id) as hits', :conditions => ["campaign_id = ?", self.campaign_id]).hits } 结尾
任何建议都会很棒!