嗯是的,只能继续在查询时加业务条件分批了
如果能够根据主键ID,分段批量删,速度还是不错的
写个程序,分批次删除,如果全部的话就truncate。
最简单的办法是直接用 Batch on 语法来快速批量删除,见:
https://docs.pingcap.com/tidb/stable/dev-guide-delete-data#bulk-delete-example
如果是要快速删除数据,最好提前规划好分区,按分区删除。这是最好的情况。
如果没有提前规划好分区,但属于定时清理过期数据这类的任务,推荐使用TTL功能,来自动删除。
https://docs.pingcap.com/zh/tidb/v7.1/time-to-live
需要注意的是TTL功能,7.1才GA,6.5也有,但属于实验特性。
如果即没有提前规划好分区,也不属于定时清理,完全是突发的,需要在一个没有分区的情况下,删除大量数据。推荐使用 bache 语法来快速删除。
需要注意的是bache 有一系列前提条件
https://docs.pingcap.com/zh/tidb/stable/non-transactional-dml#前提条件
要仔细阅读一下。
生产的话早下手,快不了。测试用分区
BATCH ON test.t.id LIMIT 10000 这种加了limit删除不靠谱,越删越慢,不如自己手工按主键编辑where条件删除
硬盘不慢也还行,一小时删1亿条问题不大