INSERT into tableB SELECT * from tableA where XXX = ?;
-- 重命名,替换
rename table tableA to tableC;
rename table tableB to tableA;
-- 删除旧表
DROP TABLE tableC;
复制代码
注意:其中俩次rename可以先drop然后一次的rename,但是考虑到数据安全,毕竟是大数量数据删除,还是多操作一步,替换后自己检查下,然后再删除旧表,稳妥些
【6】通过delete删除上百万的数据耗时不清楚具体耗时,反正自己等待了十多钟都没有结果,通过select * from sys.session WHERE conn_id!=connection_id();
查询看一直在执行。通过上面的方式500万的数据不到1分钟,还是比较快的。
【7】小技巧,如果你的大表有递增的ID,删除的或者保留数据的能够以ID作为划分的那么select的条件可以通过这里进行优化,那么操作效率会更快。
【8】如果是oracle,那么还可以使用 alter table … move 来更改存储行的表空间
alter table tableName move including rows where XXX=?