我有一个包含数亿行数据的表。我想删除该表,但是我对该表执行的每个操作在运行超过 50,000 秒(大约 16 小时)后都会失去连接,这是在我在数据库中设置的 60,000 秒超时条件下的。我尝试使用 Drop Table 代码创建一个存储过程,认为如果我将信息发送到数据库来执行操作,它将不需要连接来处理它,但它做了同样的事情。难道只是超时了?还是我需要做点别的事情?
最佳答案
而是执行截断表
。它在内部创建一个等效但空的表,然后进行交换。即使对于非常大的表,此技术也可能需要一秒钟的时间。
如果您要删除表的大部分,那么通常会更快(有时更快)
CREATE TABLE new LIKE real;
INSERT INTO new
SELECT ... FROM real
WHERE ... -- the rows you want to keep
为什么需要删除所有内容?
有关大规模删除的其他技术,包括从大表中删除大块,请参阅 https://mariadb.com/kb/en/mariadb/big-deletes/
关于MYSQL 表在删除期间超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44348979/