news 2026/5/4 12:56:42

为什么不采用级联删除而选择软删除

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为什么不采用级联删除而选择软删除

在数据库设计中,如果涉及级联删除的问题,不要通过外键的方式来进行操作,需要使用事务的方式来进行操作,为什么不采用外键的方式主要有以下两点:

  1. 在数据库中,外键会关联主键,在主键进行删除的同时会导致相关的外键也会将数据进行删除,此时有一个很大的问题就是外键删除,外键删除会导致如果出现删除异常,会导致有错误数据,系统逻辑会有问题,所以在进行删除时必须要设计成放到一个事务中进行相关联的删除。
  2. 在使用外键删除时,删除主键会导致所有相关外键数据删除,此时会导致另一个严重问题是索引重建,这种是指级联删除时代价堪比索引重建,并非是重新构建表时的索引重建。

在数据库中,外键会关联主键,所以说在操作数据库的过程中,我们需要做到不要使用外键,因为越是大的系统对于性能的要求就更高,相应的如果数据库操作使用外键可能将磁盘io全部打满,导致系统性能下降,所以说在构建时不要使用外键这种情况,可以使用字段的方式进行删除。

级联删除的索引重建:

因为数据库存储是通过b+树来分页索引存储数据进行实现,每个索引页下面的空数据超过了50%,则会进行页合并,页合并会涉及后面整个子树结构的调整,其中在调整时为了保证不出错会出现数据库上锁,此时就不能进行数据库其他操作,就会显得数据库效能极差,用户体验感也差。而且在进行主键删除时会删除相关的数据,这些数据存在不同的页下面,就可能会让多个索引页进行调整。所以这种级联删除的操作成本非常高,而且不具备可控性。

所以我们在设计时就要采用软删除+定期清理的方式来处理这个问题!!!

数据库删除策略对比图:

为什么要采用软删除+定期清理呢?

  1. 软删除+定期清理的方式可控,在进行定期删除时可以根据脚本设定批量控制删除的数据量多少,这样能够防止一次性全部删除数据之后数据库的索引重构的代价。
  2. 定期清理的方式可以采用在业务不繁忙的时间段采用定时任务来进行实现,这样的话可以增强用户体验感,防止在高频使用时间段来进行删除导致进行索引调整后占用数据库资源。
  3. 减少锁的竞争,批量删除后可能会有部分索引重构,会有数据库操作锁的竞争,所以在定期清理的批量删除时,可以采用多批次删除,在每一次批量删除时进行sleep一小段时间,防止全流程占用,在单批量完成之后的sleep时间段可以进行其他数据库相关操作提高用户体验感。
  4. 软删除时需要放到事务中进行,因为这是一整个不可分割的完成的操作。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 11:53:24

GitHub星标过万的Qwen3-VL-8B项目实战合集

Qwen3-VL-8B:轻量多模态落地的破局者 在AI模型参数竞赛愈演愈烈的今天,一个反向而行的技术路径正悄然崛起——不是追求千亿级“巨无霸”,而是打磨80亿参数级别的“精悍战士”。通义千问团队推出的 Qwen3-VL-8B 正是这一理念的典型代表。它没有…

作者头像 李华
网站建设 2026/5/3 2:22:11

Linux MAC层实现机制深度剖析

Linux MAC层实现机制深度剖析 1. MAC层在网络协议栈中的战略定位 1.1 网络世界的 “交通管理局” 想象一下, 如果网络世界是一个庞大的城市交通系统, 那么MAC(Media Access Control)层就是这座城市的交通管理局. 它位于OSI模型的第二层(数据链…

作者头像 李华
网站建设 2026/5/4 12:55:49

清华源配置Miniconda后仍慢?检查这5个网络设置

清华源配置Miniconda后仍慢?检查这5个网络设置 在人工智能项目开发中,一个常见的场景是:你已经按照教程将 Miniconda 配置为使用清华大学镜像源,信心满满地运行 conda install pytorch,结果命令行却卡在“Solving env…

作者头像 李华
网站建设 2026/5/3 0:16:21

基于SpringBoot2+Vue2的行业知识答题考试系统

行业知识答题考试系统 演示视频 https://www.bilibili.com/video/BV1J8m1BjEuE/ 角色 管理员、考生 技术 SpringBoot2, Vue2, MySQL 核心功能 本系统是一个行业知识答题考试系统,旨在提供一个完整的在线考试解决方案。核心价值在于实现题库的集中管理、试卷…

作者头像 李华
网站建设 2026/4/26 18:38:11

从零搭建高可用VPS集群:实战案例分享

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个分步指南工具,帮助用户搭建一个由3个VPS节点组成的负载均衡集群。工具应自动生成配置脚本(Nginx负载均衡、数据库主从复制、Redis缓存等&#xff09…

作者头像 李华
网站建设 2026/4/23 14:15:04

GPT-OSS-20B本地部署全攻略:基于清华镜像站快速拉取模型

GPT-OSS-20B本地部署全攻略:基于清华镜像站快速拉取模型 在大语言模型席卷各行各业的今天,越来越多开发者开始尝试将AI能力“搬回家”——不是调用云端API,而是真正在自己的笔记本、工作站甚至实验室老旧PC上跑起一个能对话、会写代码、懂逻辑…

作者头像 李华