我有一组中等大小的模型(大约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倍?
答案 0 :(得分:1)
将已删除的项目存储在单独的表中?
答案 1 :(得分:0)
复制自另一个讨论。
“查询变得非常复杂” - 选择时使用视图而不是表格。 “查询会随着时间变慢” - 使用过滤索引,而不是常规索引。