例如,如果是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。
答案 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