如何提高django中软删除的性能?

时间:2013-03-19 15:19:20

标签: python mysql django

我有一组中等大小的模型(大约350,000),由MySQL InnoDB表支持。我目前正在使用类似于this one的软删除方法,该方法在数据库中存储deleted属性。

我有一个显示这些项目计数的视图,我发现过滤掉软删除的项目非常慢。

Item.objects.filter(deleted=False).count() -> ~400ms

如果我不排除已删除的对象,则计数相对较快。

Item.objects.all().count() -> ~140ms

奇怪的是,如果我在数据库中的deleted列上添加索引,则时间会增加。

Item.objects.filter(deleted=False).count() -> ~450ms # indexed on 'deleted'

我认为这种软删除方法的替代方法可能会使我的应用程序变慢3倍?

2 个答案:

答案 0 :(得分:1)

将已删除的项目存储在单独的表中?

答案 1 :(得分:0)

复制自另一个讨论。

“查询变得非常复杂” - 选择时使用视图而不是表格。 “查询会随着时间变慢” - 使用过滤索引,而不是常规索引。