20

我正在使用截断表 table_name; 在一张大约有 100 万行的桌子上,但它已经花费了太长时间,从最近 3 个小时开始运行。

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

4

3 回答 3

53

截断在某些情况下不起作用,例如,

当你有索引类型的东西和一些外键约束时

我建议的简单方法是

RENAME TABLE table_name TO t1;

CREATE TABLE table_name LIKE t1;

DROP TABLE t1;

或者你也可以使用DELETE FROM table_name;

于 2013-07-20T12:57:12.467 回答
4

我相信在您的查询执行期间会发生死锁,所以最好杀死它。

我曾经通过在单个查询中删除小块(10k 可以正常工作)来删除大量数据。

因此,您可能会编写一些脚本来为您执行此操作。

于 2013-07-20T12:54:39.810 回答
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;
于 2018-12-26T13:53:24.170 回答