繁体   English   中英

Django queryset更新性能和优化

[英]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_togetherownerenabledis_active字段一起使用(请注意,这会在添加项目时增加一些负担)。

但是,正如@Selcuk所评论的那样,如果您以性能为目标,请使用一些严肃的数据库后端,例如postgresql。

顺便说一句,看看Django提供的数据库优化文档,这样您就可以了解一些将来实现的技巧;)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM