X的数量的最佳activerecord查询格式

时间:2014-06-23 05:33:38

标签: ruby-on-rails caching optimization query-optimization

例如,如果是Tweet has_many :favorites,是否可以更快地调用Tweet.favorites.size或在数据库中为Tweet创建单独的属性/列,例如{{ 1}}。虽然我最初的想法是num_of_favs更快,但我知道某些Rails优化技术会详细创建您自己的counter_cache方法,例如具有Tweet.favorites.size属性的Tweet模型,该属性没有太大差别来自favorites_size。我正在使用num_of_favs btw。

1 个答案:

答案 0 :(得分:1)

我在某些dbs上进行了以下控制台测试。一个有近60,000行。当然,这无论如何都不是很大。

我的测试表明,计算此表的行比从行中检索值慢30倍。但是,当你谈论.4ms或12ms时,对我来说,这对我的项目来说不值得优化。最后一个是关联。您可以看到ms后面的时间。

Loading development environment (Rails 4.0.1)
Loading ~/.railsrc
2.0.0-p247 :001 > Log.count
   (12.3ms)  SELECT COUNT(*) FROM `logs`
58133

2.0.0-p247 :002 > Log.first.method
  Log Load (0.4ms)  SELECT `logs`.* FROM `logs` ORDER BY `logs`.`id` ASC LIMIT 1
"GET"
2.0.0-p247 :003 > 

1.8.7-p352 :005 > Pack.last.lessons.count
  Pack Load (0.6ms)  SELECT `packs`.* FROM `packs` ORDER BY packs.id DESC LIMIT 1
  SQL (2.8ms)  SELECT COUNT(*) FROM `lessons` INNER JOIN `lessons_packs` ON `lessons`.id = `lessons_packs`.lesson_id WHERE ((`lessons_packs`.pack_id = 460))
 => 103