2015-02-04 33 views
0

我需要删除拥有17亿条记录的庞大数据库表。优化删除大型数据库表的方法

DB:Sybase,DB大小:350 gb。

我运行了'drop table'语句并且花费了18个多小时。 有没有其他的方法来优化它。

+0

您的RDMS是否支持TRUNCATE?在sql server中,这个命令绕过了日志记录,只是重新排列了指针,并且在几秒钟内就可以快速执行。 –

+0

无视我先前的答案。我以为你的意思是删除表格中的所有记录,在这种情况下,TRUNCATE将成为首选。我不知道哪一个更能表现DROP或TRUNCATE DROP。在清除所有元数据之前,DROP可能会执行TRUNCATE。我删除了我的答案。 –

+0

我不知道sybase是如何工作的,但在mysql中可以从文件系统中删除这些数据库文件。 – Aitch

回答

1

这篇文章太大而无法评论。如果它没有帮助,我会删除它。我在一个sybase论坛上发现了以下内容,即确保所有外键等已被删除。

http://nntp-archive.sybase.com/nntp-archive/action/article/%[email protected]%3E

附:我发现了一个解决方法,可以持续加快表格的查看速度,并首先从数据库中删除外键。我的脚本 删除表和视图以前需要5小时(约20秒 删除每个对象);如果FK首先被丢弃,则在20分钟内完成 分钟。

他们这样做,在你的情况下,整个数据库,你需要做的是有问题的表格,我不知道这会帮助,因为这里的文档

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36272.1570/html/commands/X58548.htm

其实说外键等会自动放在引用你正在丢弃的表中的表中。虽然它没有提到如果在调用drop时这些键当前是正在运行的事务的一部分会发生什么情况。