如何解决在带有postgres的Django中,切片查询的update性能不佳-有更好的解决方案吗?
我正在使用PostgreSQL 12和Django 3作为ORM
当我使用update()一次更新许多数据库行时,我注意到查询性能下降
示例应用程序来说明:
- 需要由预订系统预订商品,当商品可用时,其状态为值“ A”,而当商品为“ R”时。
- 大量预订(一次最多可预订1000到十万个项目)。
Django片段(请注意,由于已被切片,因此我无法直接在queryset上使用update):
with transaction.atomic():
items = Item.objects.select_for_update().filter(status='A')[:1000]
Item.objects.filter(pk__in=items).update(requester=r,status='R')
生成以下查询,最多需要 4秒在我的测试环境上执行,以(仅)更新1000个项目(更新1M个项目需要1小时以上的时间)。
UPDATE "item"
SET "requester_id" = 16,"status" = 'R'
WHERE "item"."id" IN (
SELECT U0."id"
FROM "item" U0
WHERE U0."status" = 'A'
LIMIT 1000
FOR UPDATE
)
我想知道是否有更好的方法来解决此问题,对提高性能有何建议? (除了优化硬件和异步/并行执行之外。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。