我有一個使用通用的關係非常基本的「新聞源」頁,以下模型:減少數據庫查詢最近的一個活動
class RecentActivity(models.Model):
event_type = models.IntegerField(choices=EVENT_TYPES)
timestamp = models.DateTimeField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
credits = models.ManyToManyField('videos.VideoCredit', blank=True)
我使用信號來聽一個對象被創建時並在顯示之前檢查以確保其存在(即,它未被刪除)。這是一個非常基礎的頁面,只有幾十行代碼可以生成它。但是,它正在生成大量的db查詢!在大約20個最近活動對象的頁面上,大約需要120個查詢,我估計它最多可以處理大約200個查詢。
解決此問題的最佳方法是什麼?我主要關心的不是減少查詢次數,而是儘可能快地加載頁面。 (我的第一個想法是反規範化)。
請注意,該頁面並非每個用戶都是動態的,但對所有用戶都是一樣的。謝謝。
感謝您的回覆。你會建議改變表 - 例如沒有一個字段的「credits」,而不是在視圖中爲它創建一個字典 – David542
很難說,我有許多領域的許多領域,並根據他們的應用程序或者不是性能問題或我的存在的禍根。一般來說,最好花一些時間來優化查詢,然後重新修改數據庫的性能;數據庫往往足夠快,如果你只是在工作。 –