我正在尝试优化我的Django后端性能。我有一个模型用户,我跟踪Django简史(https://django-simple-history.readthedocs.io/en/latest/)。
我希望能够批量更新我的用户模型,然后将其从历史记录中删除。对于单个用户,这将是这样的:
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()
答案 0 :(得分:1)
所有n的选项#2,其中n =需要更新的用户数,并假设needs_updating
和name
字段标有db_index
或以其他方式在数据库中编入索引(假设你已经测试过它并且有效)。
根据我的计算:选项#1将对数据库执行1 + 2 * n查询,而选项#2始终对数据库执行2次查询。