Django queryset更新性能和优化

2024-04-18 23:07:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个大容量删除函数,它更新所有启用的项的is_active标志。我尝试用下面的语句更新5000条记录

Item.objects.filter(owner=request.user.profile, enabled=True, is_active=True).update(is_active=False)

但是它的速度非常慢,我担心这会导致服务器内存不足。在

我以前有过下面的,但还是很慢。在

^{pr2}$

正在使用的数据库是SQLite,我正在使用Django 1.7。在

我希望尽可能优化这个操作。任何指针或良好的查询优化文档将不胜感激。在


Tags: 函数trueobjectsisrequest标志记录语句
1条回答
网友
1楼 · 发布于 2024-04-18 23:07:55

你说你正在删除,但是在你的代码中你是在更新行而不是删除。除此之外,您在第一个代码段中使用的格式是正确的。在

要提高性能,您可以使用index_together所有者已启用是活动的字段(注意,这会在添加项目时增加一些负载)。在

但是,正如@Selcuk评论的那样,如果您的目标是性能,那么就使用一些严肃的数据库后端,比如postgresql。在

顺便说一句,看看Django提供的db optimization文档,这样您就可以学到一些将来实现的技巧;)。在

相关问题 更多 >