簡體   English   中英

檢索模型中的記錄時如何減少相同查詢的數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM