2026/6/20 6:30:53
网站建设
项目流程
失效网站建设费支出,wordpress删除空标签,济南软件开发外包公司,平台企业在数据库设计中#xff0c;如果涉及级联删除的问题#xff0c;不要通过外键的方式来进行操作#xff0c;需要使用事务的方式来进行操作#xff0c;为什么不采用外键的方式主要有以下两点#xff1a;在数据库中#xff0c;外键会关联主键#xff0c;在主键进行删除的同时…在数据库设计中如果涉及级联删除的问题不要通过外键的方式来进行操作需要使用事务的方式来进行操作为什么不采用外键的方式主要有以下两点在数据库中外键会关联主键在主键进行删除的同时会导致相关的外键也会将数据进行删除此时有一个很大的问题就是外键删除外键删除会导致如果出现删除异常会导致有错误数据系统逻辑会有问题所以在进行删除时必须要设计成放到一个事务中进行相关联的删除。在使用外键删除时删除主键会导致所有相关外键数据删除此时会导致另一个严重问题是索引重建这种是指级联删除时代价堪比索引重建并非是重新构建表时的索引重建。在数据库中外键会关联主键所以说在操作数据库的过程中我们需要做到不要使用外键因为越是大的系统对于性能的要求就更高相应的如果数据库操作使用外键可能将磁盘io全部打满导致系统性能下降所以说在构建时不要使用外键这种情况可以使用字段的方式进行删除。级联删除的索引重建因为数据库存储是通过b树来分页索引存储数据进行实现每个索引页下面的空数据超过了50%则会进行页合并页合并会涉及后面整个子树结构的调整其中在调整时为了保证不出错会出现数据库上锁此时就不能进行数据库其他操作就会显得数据库效能极差用户体验感也差。而且在进行主键删除时会删除相关的数据这些数据存在不同的页下面就可能会让多个索引页进行调整。所以这种级联删除的操作成本非常高而且不具备可控性。所以我们在设计时就要采用软删除定期清理的方式来处理这个问题数据库删除策略对比图为什么要采用软删除定期清理呢软删除定期清理的方式可控在进行定期删除时可以根据脚本设定批量控制删除的数据量多少这样能够防止一次性全部删除数据之后数据库的索引重构的代价。定期清理的方式可以采用在业务不繁忙的时间段采用定时任务来进行实现这样的话可以增强用户体验感防止在高频使用时间段来进行删除导致进行索引调整后占用数据库资源。减少锁的竞争批量删除后可能会有部分索引重构会有数据库操作锁的竞争所以在定期清理的批量删除时可以采用多批次删除在每一次批量删除时进行sleep一小段时间防止全流程占用在单批量完成之后的sleep时间段可以进行其他数据库相关操作提高用户体验感。软删除时需要放到事务中进行因为这是一整个不可分割的完成的操作。