2016-04-29 45 views
0

我試圖優化我的Django後端性能。我有一個使用Django Simple History(https://django-simple-history.readthedocs.io/en/latest/)跟蹤的模型用戶。刪除歷史記錄的Django批量更新

我希望能夠批量更新我的用戶模型,然後將其從歷史記錄中刪除。對於單個用戶,這看起來像這樣:

u = User.objects.get(id=user_id) 
u.name = "new name" 
u.save() 
u.history.first().delete() # I don't want to track this change. 

性能方面,哪個更好?

選項1:

users = User.objects.filter(needs_updating=True) 
for user in users: 
    user.name = "New name" 
    user.save() 
    user.history.first().delete() 

選項2:

User.objects.filter(needs_updating=True).update(name="new name") 
User.history.filter(name="new name").delete() 

回答

1

選項#2對所有的n,其中n =需要更新並假設needs_updatingname字段被標記的用戶數與db_index或以其他方式在數據庫中編入索引(假設您已經測試過它並且工作正常)。

By my count:選項#1將對數據庫執行1 + 2 * n查詢,而選項2始終對數據庫執行2個查詢。