在MySQL中有大表需要清理,该表超过100GB,不敢直接delete或者truncate、drop,怕影响业务。
一般情况下(少量数据),不同的场景可以选择不同的方式来做数据删除。
delete命令逐行删除数据,涉及行锁,删除多条数据时性能差.
drop命令会删除表数据及结构、触发器、分区等。
drop命令会持有buffer pool的锁,还涉及ibd磁盘文件的删除。表越大持有锁的时间越长,IO资源消耗越大,会影响在线业务。
truncate命令清除整个表的数据,需要执行人有drop权限。
对于大表的场景,常见的做法:
create table new_table like old_table ; rename table old_table to old_table_del ;