我正在使用截断表 table_name; 在一张大约有 100 万行的桌子上,但它已经花费了太长时间,从最近 3 个小时开始运行。
正常吗?您能否建议一些其他方法来删除表中的所有行,这可能会更快?
我正在使用截断表 table_name; 在一张大约有 100 万行的桌子上,但它已经花费了太长时间,从最近 3 个小时开始运行。
正常吗?您能否建议一些其他方法来删除表中的所有行,这可能会更快?
截断在某些情况下不起作用,例如,
当你有索引类型的东西和一些外键约束时
我建议的简单方法是
RENAME TABLE table_name TO t1;
CREATE TABLE table_name LIKE t1;
DROP TABLE t1;
或者你也可以使用DELETE FROM table_name;
我相信在您的查询执行期间会发生死锁,所以最好杀死它。
我曾经通过在单个查询中删除小块(10k 可以正常工作)来删除大量数据。
因此,您可能会编写一些脚本来为您执行此操作。
给定问题记录在 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;