Oracle删除查询需要很长时间才能从表中删除记录

时间:2013-09-12 07:22:00

标签: sql oracle oracle10g

查询: Delete from test_table;(我在过程中使用此删除命令来执行每日)

此表包含2个列名,如scenario_id,item_id,这2列是复合主键。所以每个scenario_id将有2百万个item_id,如何快速删除这个表。

2 个答案:

答案 0 :(得分:1)

删除表的最快方法可能是DROP TABLE test_table命令,并使用CREATE TABLE...命令重新创建表。 DROP TABLE...会立即删除表格。好吧,实际上它会将表格移动到recyclebin中。如果要完全删除表,您应该PURGE RECYCLEBIN

删除表中数据的其他方法是使用TRUNCATE TABLE...。这比DROP TABLE...略慢,但比DELETE FROM...快得多。由于在截断表后无法回滚数据,因此在使用TRUNCATE TABLE时应该小心。

答案 1 :(得分:0)

  • 检查是否有任何外键指向此表。如果是,那么这些引用列上必须有索引。否则,维护参照完整性将需要很长时间
  • (Transactional)Oracle上的删除本质上很慢。由于删除的数据很简单,必须将其复制到UNDO表空间,REDO日志以及归档的REDO日志中。这就是Oracle保护数据的方式。
  • 如果我们删除了超过50%的数据,只需create new table as select * from old_table where ...然后删除新旧数据并将其重命名为旧数据就会快得多。
  • 您可以通过分区表中的exchanging分区实现类似的目标。
  • 如果你的表是明智地分区的话,你可以简单地删除表的分区