高效删除大量数据的小技巧:先用select count(*)统计数量,然后分批删除,比如delete from table where id > 1000000 and rownum <= 10000; 循环执行直到删完,避免锁表时间过长。网友推荐用commit每删一批就提交。
方法一:使用ROWNUM分页删除
DELETE FROM your_table WHERE ROWID IN (SELECT ROWID FROM your_table WHERE ROWNUM <= 10000); 这方法超级快,不会锁整个表,适合百万级数据清理。
方法二:TRUNCATE TABLE快速清空
如果要删光所有记录,直接TRUNCATE TABLE table_name; 比DELETE快100倍,还重置自增ID,但注意备份和外键约束。
方法三:CTAS重建表
CREATE TABLE new_table AS SELECT * FROM old_table WHERE condition; 然后drop old_table,重命名new_table。删除海量无效数据神器,网友说比delete快几倍。
方法四:用PL/SQL循环批量删
BEGIN FOR i IN 1..100 LOOP DELETE FROM table WHERE condition AND ROWNUM <=10000; COMMIT; END LOOP; END; / 防止大事务回滚,超级实用。
方法五:禁用索引再删
ALTER INDEX idx_name UNUSABLE; 然后DELETE,删完再rebuild。网友分享删亿级数据时速度提升10倍。
Q: 删除数据会锁表多久?
A: 用ROWNUM分批删,每批1万行,锁表时间很短,几秒搞定。
Q: TRUNCATE和DELETE区别?
A: TRUNCATE不记录日志,超快,但不能回滚,且删光所有数据。
Q: 大表删不完怎么办?
A: 改用CTAS重建表,或分区表删分区,效率最高。
Q: 怎么避免删错数据?
A: 先SELECT确认,再DELETE,加WHERE条件测试。