2017-06-03 54 views
0

我有一个数亿行数据表。我想删除表格,但是我在表格上执行的每一个操作都会在超过50,000秒(大约16小时)后失去连接,这是在数据库中设置的60,000秒超时条件下。我已经尝试用Drop Table代码创建一个存储过程,认为如果将信息发送到数据库来执行操作,它不需要连接来处理它,但它也会执行相同的操作。它只是超时?还是我需要做点别的?MYSQL表超时下降

+0

也许尝试批量删除数据?根据主键或行号删除几百万行。然后,在删除所有数据后,您应该可以删除表格。 –

+0

我会给你一个镜头,但即使运行一个简单的查询,但限制为0,10“失去连接”。 –

+0

我想下面的代码:DELETE FROM Table_Data WHERE Company_ID LIKE'%A%'LIMIT 0,1000000;目前正在运行14小时。 –

回答

0

而不是TRUNCATE 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/

+0

我也试过TRUNCATE,但它只是运行,直到它超时。我改变了超时会话限制,并再次尝试这些方法。我正在删除,因为每次我在表上运行一个查询时,它的时间都接近原始的60,000秒。所以,我希望重新开始并将表分成更小的片段以减少查询时间。表中还有重复的信息,所以重新开始是有意义的。 –

+0

InnoDB应该“回滚”插入,如果它在完成前死亡?请提供'SHOW CREATE TABLE'。 –