我尝试使用以下方法删除大约 200,000 个对象(它们都有多个相关对象,总共大约 2,000,000 个对象):
DataRecord.objects.filter(order=self.order).delete()
但我收到内部服务器错误(大约 20 分钟后),并且没有任何对象被删除。我将 Apache 超时设置为 3600(1 小时),以便为该操作提供足够的时间。
是否有更有效的方法来批量删除大量对象?
最佳答案
似乎最好的解决方案是使用原始查询(请参阅 https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly ),但是 pre_delete
、post_delete
信号不会被触发。
随机 ORM 想法:DataRecord.order
列是否已索引?
编辑:
识别列是否容易:查看列是否设置了 db_index
属性,即:
class DataRecord(models.Model):
order = models.IntegerField(_("order"), **db_index=True**)
索引可以快速查找数据,而无需读取整个表。这就像书中的索引 - 当您想在其中查找某个单词时,索引将帮助您找到它,而无需阅读整本书。
关于django - 删除大型 Django 查询集导致 Apache 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12116452/