当前位置:  开发笔记 > 后端 > 正文

删除庞大的MySQL表的最快方法

如何解决《删除庞大的MySQL表的最快方法》经验,为你挑选了4个好方法。

我有一个庞大的MySQL(InnoDB)数据库,在会话表中有数百万行,这些行是由与我们相同的服务器上运行的无关,故障的爬虫创建的.不幸的是,我现在必须解决这个问题.

如果我尝试truncate table sessions;它似乎需要非常长的时间(超过30分钟).我不关心数据; 我只想让桌子尽快消失.有没有更快的方法,还是我必须在一夜之间坚持下去?



1> searlea..:

(由于这在谷歌的结果中显得很高,我认为更多的指令可能会很方便.)

MySQL有一种方便的方法来创建像现有表这样的空表,以及一个原子表重命名命令.总之,这是清除数据的快速方法:

CREATE TABLE new_foo LIKE foo;

RENAME TABLE foo TO old_foo, new_foo TO foo;

DROP TABLE old_foo;

完成


值得注意的是,此方法将删除您要删除的表与其他表之间的任何外键关联.
完美的决策,本机,纯正和逻辑上出色。放松一下。

2> womp..:

最快的方法是使用DROP TABLE完全删除表并使用相同的定义重新创建它.如果表上没有外键约束,那么你应该这样做.

如果您使用的MySQL版本大于5.0.3,则会自动使用TRUNCATE.您也可以从手册中获得一些有用的信息,它描述了TRUNCATE如何使用FK约束. http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html

编辑:TRUNCATE与drop或DELETE FROM不同.对于那些对差异感到困惑的人,请查看上面的手册链接.如果可以的话,TRUNCATE的行为与drop相同(如果没有FK),否则它就像DELETE FROM而没有where子句.



3> Nate..:

难道你不能抓住架构删除表并重新创建它吗?



4> adnan...:

我用MySQL发现这个问题的最好方法是:

DELETE from table_name LIMIT 1000;

或10,000(取决于它发生的速度).

将它放在一个循环中,直到删除所有行.

请尝试这个,因为它将实际工作.这需要一些时间,但它会奏效.


你之前用大桌子做过这个吗?"从...中删除"通常会占用大量CPU并需要更长时间.行数越少,删除的速度就越快.尝试一下.这不是一项智力练习,这实际上适用于MySQL.
对不起,如果你真的要删除行,为什么不简单地"删除table_name"?
如果将LIMIT与DELETE一起使用,则还应使用ORDER BY.
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有