我正在使用truncate table table_name;在一张大约有100万行的桌子上,但自从过去3个小时以来一直运行太久了。
这是正常的吗?你能否建议一些其他方法来删除表中的所有行,这可能会更快?
答案 0 :(得分:38)
截断在某些情况下不会起作用,例如,
当你有索引类型的东西和一些外键约束
我建议的简单方法是
RENAME TABLE table_name TO t1;
CREATE TABLE table_name LIKE t1;
DROP TABLE t1;
或者您也可以使用DELETE FROM table_name;
答案 1 :(得分:3)
我相信在执行查询期间会发生死锁,因此最好将其删除。
我曾经通过删除单个查询中的小块来删除大量数据(10k工作正常)。
所以你可能会写一些脚本来为你做这件事。
答案 2 :(得分:1)
在mysql repo中记录了问题。有关更多详细信息,请访问https://bugs.mysql.com/bug.php?id=68184
在我的情况下,我试图使用JDBC构造表,但是由于上述原因,我无法做到这一点。 所以正在经历下面的选择。
String createTmpTable = "create table tmp_" + tableName + " like " + tableName;
String dropTable = "drop table " + tableName;
String reCreateTable = "create table " + tableName + " like tmp_" + tableName;
String droptmpTable = "drop table tmp_" + tableName;