硬删除不多解释
为什么要用到软删除
有后悔药可以恢复数据。但是同时带来弊端。导致 查数据时 慢 尤其是一些特殊场景下。
目前 软删除的做法
- 在表内加 isDeleted bool
- 在表内添加 deleted_at timestamp (可以为null) (gem gorm这类orm框架支持)
- 将删除数据 存储到 因为一个表内 (看过一些软件是这样实现的,感觉效率高,开发稍微费事点)
第2种 方式 其实是最差的。因为 可以为null 导致 查询效率大打折扣。更重要的情况 会导致 全表扫描 如果数据量偏大千万不要贪图方便就是这要搞了,这类导致查询的性能瓶颈我在2个项目都有遇到过。
设计软删除原则
- 考虑是否 一定需要软删除 (不需要最好不要画蛇添足)
- 考虑数据业务量,读 和 写的 比例
- 读条件 针对 where 条件复杂 并且 业务量 1w条以上的 建议不要使用第2种方案 可以考虑使用第3种方案
explain + sql语句 可以分析sql过程
image.png
有网友提供说 加复合索引 (id, deleted_at) 应该也可以没有测试过性能能提高多少。如果你用过也可以告知一下我。让我长长姿势O(∩_∩)O哈哈~
这篇文章也有介绍到软删除的短板我这里不多累赘
https://ruby-china.org/topics/34540
记录这个不为别的 给自己看,如果对你有帮助我也特别高兴。
网友评论