0

我有一组中等大小的模型(大约 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 倍?

4

2 回答 2

1

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

于 2013-03-19T15:28:08.307 回答
0

复制自另一个讨论。

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

于 2021-01-26T21:31:27.247 回答