我有一组中等大小的模型(大约 350,000 个),由 MySQL InnoDB 表支持。我目前正在使用一种类似于这种在数据库中存储deleted
属性的软删除方法。
我有一个显示这些项目计数的视图,我发现过滤软删除的项目非常慢。
Item.objects.filter(deleted=False).count() -> ~400ms
如果我不排除删除的对象,计数是比较快的。
Item.objects.all().count() -> ~140ms
奇怪的是,如果我deleted
在 db 中的列上添加索引,时间会增加。
Item.objects.filter(deleted=False).count() -> ~450ms # indexed on 'deleted'
我可以考虑这种软删除方法的哪些替代方法不会使我的应用程序变慢 3 倍?