[英]How to reduce number of identical queries when retrieving records in model
我已經開始使用查詢分析器 ,它警告我有關相同的查詢。
對於上下文,我在頁面上加載了25個“帖子”,當前用戶可以“加注星標”一個帖子:
0.018s 25個相同的查詢在
SELECT SQL_NO_CACHE N AS one FROM 'stars' WHERE 'stars'.'post_id' = N AND 'stars'.'user_id' = N LIMIT N
這是用戶模型中的方法:
def has_starred_post?(post)
return false if post.nil?
Star.where(post_id: post.id, user_id: self.id).exists?
end
如何通過減少查詢數量來滿足此警告?
更新:
根據Taryn East的技巧,我將User
模型方法更新為:
def has_starred_post?(post)
return false if post.nil?
self.stars.where(post_id: post.id).exists?
# OR post.stars.where(:user_id => self.id).exists?
end
盡管這使我可以關聯/緩存屬於該用戶的星標,但是我仍然必須使用where
來檢查where
任何星標是否屬於該帖子。 對?
您可以通過使用關聯來減少這種重復查詢-關聯會由Rails自動緩存。
class Post
has_many :stars
class User
def has_starred_post?(post)
return false if post.nil?
post.stars.exists?
end
或重新組織,以使其對您的實際對象模型有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.