

何傲
一枚来自神码钛合金战队的
TiDB 爱好者

问题究竟出在哪儿
问题似乎很简单,
但是这里面涉及到的知识点
很多,
也非常重要,
我觉得有必要做一次系统梳理,
防止新手踩坑。

数据删除背后的原理
是怎样的?
既然我们改变不了这个现状,
那么如何用正确的方式去删数据,
就是要重点关心的了。

正确删除数据
究竟该怎么做呢?
实际场景中,删数据不外乎以下几种情况:
对某张表按过滤条件批量删除
删除某张表的全部数据,俗称清表
删表
删库
第一种
对于第一种,如果结果集很大,最佳做法是把过滤条件进行细化,一批一批的去删。
它的好处是首先不容易触发大事务限制,其次能够减少误删的情况。
不仅仅是批量删除,批量更新也应该是同样的做法,把条件拆的更细一些。
我常用的做法是,按过滤条件找出对应数据行的 rowid,然后把这些 rowid 进行分段,对这一段的范围做更新或删除,这样能极大提升操作效率。
第二种
对于第二种全表删除,极力推荐使用 truncate。
它相当于删表重建新表,所以 tableid 必然是和以前不一样了,那就肯定不会扫描到历史版本数据,删表建表也只涉及到元数据操作,速度很快。
还有一点,truncate 数据以后,被 GC 扫过的历史数据会直接清掉释放出存储空间,delete 操作则不会释放,要等到 compaction 才能被再次利用。
第三种
对于第三种,没得选了,只有drop table。
第四种
对于第四种,也只有drop database。
那么问题来了,
以上几种删数据的方式,
万一是误删,
你想好了如何快速恢复吗?
还是想直接 paolu。。。

删除数据
我们应该注意哪些呢?

最后想说..

文章转载自神州数码云基地,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。