Mysql 截断表需要很长时间,这正常吗?
我正在使用truncate table_名称;在一个大约有100万行的表上,但从过去3个小时开始运行,时间太长了Mysql 截断表需要很长时间,这正常吗?,mysql,Mysql,我正在使用truncate table_名称;在一个大约有100万行的表上,但从过去3个小时开始运行,时间太长了 这正常吗?您能推荐一些其他方法来删除表中的所有行吗?这可能会更快一些?我相信死锁会在查询执行过程中发生,所以最好终止它 我过去常常通过在一个查询中删除小数据块来删除大量数据(10k很好) 因此,您可以编写一些脚本来完成此任务。在某些情况下,Truncate无法工作,例如 当你有索引之类的东西和一些外键约束时 我建议的简单方法是 RENAME TABLE table_name TO t
这正常吗?您能推荐一些其他方法来删除表中的所有行吗?这可能会更快一些?我相信死锁会在查询执行过程中发生,所以最好终止它 我过去常常通过在一个查询中删除小数据块来删除大量数据(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很慢,我会考虑创建一个具有相同结构的新表,然后删除旧表,我认为这会很快。请分享您对此的看法。我遇到的问题是,一个陈旧的连接在提交到表时被卡住,因此它被冻结。