mysql为什么不建议delete数据?


delete对性能会有影响,一般不建议硬性delete数据,而是标记deleted = 1这种软删除

为啥呢?

 

根据之前了解的mysql底层存储原理

最小存储单元page页,无论是非叶子节点page存的是索引key和指针,还是叶子节点存的是行数据

 

1.当删除大量数据时

MySQL内部不会真正删除空间,而且做标记删除,即将delflag:N修改为delflag:Y,commit之后会会被purge进入删除链表,

如果下一次insert更大的记录,delete之后的空间不会被重用,如果插入的记录小于等于delete的记录空会被重用

 

2.当少量删除中间数据时

你在中间删了某些个值,实际上只是找到那个page页找到对应的数据做删除标记,并不会实际影响page页已经占的大小,这块空间可能也永远不会被利用,产生了内存碎片

导致索引频繁分裂,影响SQL执行计划的稳定性

 

 

正确姿势:

使用deleted = 1 字段来软删除,保证索引连续性,

必要时,可将deleted = 0的字段完整迁移到新表,解决碎片问题

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM