我正在尝试截断一个有300,000行的表。当没有其他查询运行时,我运行truncate查询,它就挂起了。
show processlist;说状态正在“更新”。
服务端版本: 5.1.41-3ubuntu12.8 (Ubuntu)
该表是InnoDB。
你知道为什么会发生这种情况吗,或者我如何进一步调查这个问题?
谢谢。
发布于 2011-01-24 17:44:18
我认为这是外键检查的问题。
我发现以下代码的运行速度和预期的一样快:
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table_name;
SET FOREIGN_KEY_CHECKS = 1;发布于 2015-11-13 23:00:18
虽然不是最技术性的答案,但我今天就努力解决了这个问题。我尝试了上面所有的方法(锁定表、外键检查、检查innodb引擎状态等等),但都没有用(尽管在后一种情况下,我根本没有充分理解我正在阅读的内容)。
我有一个邮件作业表,它拒绝写锁定、截断、重命名或删除(尽管它是完全空的)。我最终放弃并重新启动了mysql服务,在这一点上,我可以进行所需的更改,没有问题。
发布于 2011-01-15 02:14:31
我们的一个客户有一张大小为450 of 的表。我们试了所有的方法清空这个表,但是没有人解决这个问题。
我们试图截断该表,但是截断操作花费了超过10个小时的时间,并且没有解决问题。当我们在这个表上的任何查询中使用WHERE statement时,SQL server都会不间断地执行查询。
我能在1秒内清空表格的唯一方法如下:
set rowcount 1;
truncate table TABLE_NAME;当然,在截断表之后,只需继续收缩数据库。
通过这种方法,您只需删除指向此表的指针,表中的数据行将通过收缩来删除
https://stackoverflow.com/questions/4694335
复制相似问题