2026/1/17 10:17:15
网站建设
项目流程
网站桌面图标怎么做,在线呼叫网页版,企业申请完域名以后 怎么把网站运行起来,网站建设的整体流程有哪些1.问题比如关注表#xff0c;当关注时插入一行#xff0c;取观时只是将delete列设置为1#xff0c;并没有把这一行删除#xff0c;为什么要这么做#xff1f;为什么要update#xff0c;而不是delete#xff1f;为什么使用了软删除#xff08;逻辑删除#xff09;…1.问题比如关注表当关注时插入一行取观时只是将delete列设置为1并没有把这一行删除为什么要这么做为什么要update而不是delete为什么使用了软删除逻辑删除而不是硬删除物理删除2.原因有可能取关后又再关注会导致频繁插入删除大量delete可能会有性能问题会产生undo logdelete存储的是本行所有列的数据log文件会更大产生索引碎片。2.1 对索引的影响DELETE一行 不会立刻重建主键索引但会 造成 BTree 的“空洞 / 碎片”长期大量 DELETE → 主键索引效率下降。在 InnoDB 中主键索引 聚簇索引数据行本身就存放在 BTree 的叶子节点里也就是说删一行 ≈ 从主键 BTree 里“挖掉一个叶子记录”长期后会变成同样数量的有效数据需要扫描更多的索引页update操作的是非索引字段没有这方面的影响。2.2 索引重建时机只有这些情况OPTIMIZE TABLEALTER TABLE ... ENGINEInnoDBALTER TABLE重建导出再导入这些操作会重建聚簇索引会锁表 / 占资源不可能频繁在线执行 所以线上系统靠设计避免 DELETE而不是事后 OPTIMIZE。2.3 undo log撤销日志Undo log 的核心作用只有两个1️⃣支持事务回滚Rollback2️⃣支持 MVCC让读不被写阻塞它本质上是“把你这次修改之前的旧数据存下来”对不同操作undo log 内容不同✅ INSERTundo log 记录“这行需要被删掉”✅ DELETEundo log 记录“这行原本长什么样”回滚时恢复整行✅ UPDATEundo log 记录被修改字段的旧值回滚时改回去⚠️ 注意重点UPDATE deleted1 只记录 deleted 的旧值0同时undo log能避免脏读一个事务未提交之前另一个线程看不到它的修改。undo log清理✅ 1. 事务已经提交 / 回滚✅ 2.没有任何事务还需要这个旧版本