[英]Django queryset update performance and optimization
我创建了一个批量删除功能,用于更新所有启用项的is_active
标志。 我尝试使用以下语句更新5000条记录
Item.objects.filter(owner=request.user.profile, enabled=True, is_active=True).update(is_active=False)
但这非常缓慢,我担心这会导致服务器内存不足。
我以前有以下内容,但仍然很慢。
items = Item.objects.filter(owner=request.user.profile, enabled=True, is_active=True)
for item in items:
item.is_active = False
item.save()
使用的数据库是SQLite
而我使用的是Django 1.7
。
我希望尽可能优化此操作。 任何指针或良好的查询优化文档将不胜感激。
您说要删除,但是在代码中您正在更新行而不是删除行。 除此之外,您在第一个代码段中使用的格式是可行的方法。
为了提高性能,您可以将index_together与owner , enabled和is_active字段一起使用(请注意,这会在添加项目时增加一些负担)。
但是,正如@Selcuk所评论的那样,如果您以性能为目标,请使用一些严肃的数据库后端,例如postgresql。
顺便说一句,看看Django提供的数据库优化文档,这样您就可以了解一些将来实现的技巧;)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.