截断表需要很长时间,这是正常的吗?

时间:2013-07-20 12:39:34

标签: mysql

我正在使用truncate table table_name;在一张大约有100万行的桌子上,但自从过去3个小时以来一直运行太久了。

这是正常的吗?你能否建议一些其他方法来删除表中的所有行,这可能会更快?

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;
相关问题