我正在尝试截断一个包含300,000行的表。当没有其他查询正在运行时,我运行截断查询,它只是挂起。
show processlist;
表示州正在“更新”。
服务器版本:5.1.41-3ubuntu12.8(Ubuntu)
该表是InnoDB。
为什么会发生这种情况,或者我如何进一步调查问题?
感谢。
答案 0 :(得分:5)
我认为这是外键检查问题。
我发现以下内容的工作速度与预期一样快:
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table_name;
SET FOREIGN_KEY_CHECKS = 1;
答案 1 :(得分:0)
我们的一位客户有一张 450GB 尺寸的桌子。我们尝试了各种方法来清空这张桌子,但没有人解决这个问题。
我们试图截断表格,但截断操作花了10多个小时并没有解决问题。当我们在此表的任何查询中使用WHERE statement
时,SQL Server会不停地执行查询。
我能够 在1秒内清空表 的唯一方法如下:
set rowcount 1;
truncate table TABLE_NAME;
当然,在截断表之后,只需缩小数据库即可。
通过这种方法,您只需删除指向此表的指针,并通过shrink
删除表的数据行答案 2 :(得分:0)
虽然不是最技术性的答案,但我今天仍在努力解决这个问题。我尝试了以上所有(锁定表,外键检查,检查innodb引擎状态等等),但没有一个是有用的(尽管在后一种情况下,我根本没有充分理解我正在阅读的内容。)
我有一个拒绝写入锁定,截断,重命名或删除的邮件作业表(尽管完全是空的。)我终于陷入困境并重新启动了mysql服务,此时我可以进行必要的更改,没问题。