美文网首页MySQLGolang
mysql软删除和硬删除

mysql软删除和硬删除

作者: 数据小菜鸟 | 来源:发表于2019-05-25 14:01 被阅读0次

    硬删除不多解释

    为什么要用到软删除

    有后悔药可以恢复数据。但是同时带来弊端。导致 查数据时 慢 尤其是一些特殊场景下。
    目前 软删除的做法

    1. 在表内加 isDeleted bool
    2. 在表内添加 deleted_at timestamp (可以为null) (gem gorm这类orm框架支持)
    3. 将删除数据 存储到 因为一个表内 (看过一些软件是这样实现的,感觉效率高,开发稍微费事点)

    第2种 方式 其实是最差的。因为 可以为null 导致 查询效率大打折扣。更重要的情况 会导致 全表扫描 如果数据量偏大千万不要贪图方便就是这要搞了,这类导致查询的性能瓶颈我在2个项目都有遇到过。

    设计软删除原则

    1. 考虑是否 一定需要软删除 (不需要最好不要画蛇添足)
    2. 考虑数据业务量,读 和 写的 比例
    3. 读条件 针对 where 条件复杂 并且 业务量 1w条以上的 建议不要使用第2种方案 可以考虑使用第3种方案
    explain + sql语句 可以分析sql过程
    
    image.png

    有网友提供说 加复合索引 (id, deleted_at) 应该也可以没有测试过性能能提高多少。如果你用过也可以告知一下我。让我长长姿势O(∩_∩)O哈哈~

    这篇文章也有介绍到软删除的短板我这里不多累赘

    https://ruby-china.org/topics/34540

    记录这个不为别的 给自己看,如果对你有帮助我也特别高兴。

    相关文章

      网友评论

        本文标题:mysql软删除和硬删除

        本文链接:https://www.haomeiwen.com/subject/lqgazqtx.html