2016-04-29 39 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个查询。