我如何优化我的 SQL 查询,以忽略这样的情况:
Meeting.find(5).users.size => SELECT COUNT(*) FROM ... WHERE ...
User.find(123).meetings.size => SELECT COUNT(*) FROm ... WHERE ...
我不知道如何在这里使用 counter_cache。
这是我的模型关系:
class Meeting < ActiveRecord::Base
has_many :meeting_users
has_many :users, :through => meeting_users
end
class User < ActiveRecord::Base
has_many :meeting_users
has_many :meetings, :through => meeting_users
end
class Meeting_user < ActiveRecord::Base
belongs_to :meeting
belongs_to :user
end
最佳解决方案是什么?以及如何在这里实现 counter_cache ?
最佳答案
从 Rails3.0.5 和更新版本开始,您现在可以将计数器缓存设置为“链接器”模型,在您的情况下,它将是:
class MeetingUser < ActiveRecord::Base
belongs_to :meeting, :counter_cache => :users_count
belongs_to :user, :counter_cache => :meetings_count
end
明确指定计数列名很重要,否则使用的列将默认为
meeting_users_count
.
关于sql - counter_cache has_many_through sql优化,减少sql查询次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4700247/