如果数据清理简单粗暴按时间进行清理,同时时间字段并没有增加索引就会出问题
如果没有增加索引,他就会进行全表扫描,并且会给全表的数据上一个x锁
会阻塞其他的线程
解决方案参考阿里云DMS数据清理方案
这个SQL查询的目的是从名为`table_hollis`的表中选择`id`,但它有一个特定的条件。让我们逐步分析这个查询:
1. 子查询(别名为`t`)是从同一张表中选择`gmt_create`字段。它选择的行是`id`在100到100000之间的前1000行(由于有`limit 1000`)。
2. 这个子查询还检查这些行的`gmt_create`日期是否早于当前日期(`CURDATE()`)减去300天(`SUBDATE(CURDATE(),INTERVAL 300 DAY)`)。如果有至少一个行满足这个条件(即,存在一个记录创建时间小于当前日期300天的记录),则子查询将返回至少一个结果。
3. 外层查询选择`id`字段,但仅当子查询(`hasNeedDelItem`)返回结果时。这意味着如果至少有一个`gmt_create`早于当前日期300天的记录,它将返回所有100到100000之间`id`的前1000条记录。如果没有任何记录符合子查询的条件,则不返回任何记录。
总结一下,这个SQL查询检查在`table_hollis`表中`id`介于100到100000之间的记录中,是否存在至少一个其`gmt_create`日期小于当前日期300天的记录。如果存在,它将选择`id`在100到100000之间的前1000条记录。如果不存在,它什么也不选择。
总结:查询一批id内有没有可能过期的id
再将这批id进行挨个检查 删除