Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 截断表需要很长时间,这正常吗?_Mysql - Fatal编程技术网

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

Mysql 截断表需要很长时间,这正常吗?,mysql,Mysql,我正在使用truncate table_名称;在一个大约有100万行的表上,但从过去3个小时开始运行,时间太长了 这正常吗?您能推荐一些其他方法来删除表中的所有行吗?这可能会更快一些?我相信死锁会在查询执行过程中发生,所以最好终止它 我过去常常通过在一个查询中删除小数据块来删除大量数据(10k很好) 因此,您可以编写一些脚本来完成此任务。在某些情况下,Truncate无法工作,例如 当你有索引之类的东西和一些外键约束时 我建议的简单方法是 RENAME TABLE table_name TO t

我正在使用truncate table_名称;在一个大约有100万行的表上,但从过去3个小时开始运行,时间太长了


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

我相信死锁会在查询执行过程中发生,所以最好终止它

我过去常常通过在一个查询中删除小数据块来删除大量数据(10k很好)


因此,您可以编写一些脚本来完成此任务。

在某些情况下,Truncate无法工作,例如

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

我建议的简单方法是

RENAME TABLE table_name TO t1;

CREATE TABLE table_name LIKE t1;

DROP TABLE t1;

或者您也可以使用
DELETE FROM table_name

给定问题记录在mysql repo中。欲了解更多详情,请访问

在我的例子中,我试图使用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;

另外,请检查:你机器上的统计数据是什么?我已经删除了查询,在我删除它的时候已经删除了60万条记录,但由于数据对我来说并不重要,所以我只是将旧表的结构复制到一个新表中,然后删除旧表。如果truncate很慢,我会考虑创建一个具有相同结构的新表,然后删除旧表,我认为这会很快。请分享您对此的看法。我遇到的问题是,一个陈旧的连接在提交到表时被卡住,因此它被冻结。