1

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

该表包含 2 列名称,如scenario_id、item_id,这 2 列是复合主键。所以每个scenario_id都会有200万个item_id,如何快速删除这个表。

4

2 回答 2

1

删除表的最快方法可能是DROP TABLE test_table命令,然后使用CREATE TABLE...命令重新创建表。DROP TABLE...将立即放下桌子。好吧,实际上它会将表格移动到回收站中。PURGE RECYCLEBIN如果要完全删除表格,您应该这样做。

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

于 2013-09-12T07:27:50.200 回答
0
  • 检查是否有任何外键指向此表。如果是,则这些引用列上必须有索引。否则,参照完整性的维护将需要很长时间
  • (事务性)Oracle 上的删除本质上很慢。很简单,因为删除的数据必须复制到 UNDO 表空间、REDO 日志以及归档的 REDO 日志中。这就是 Oracle 保护数据的方式。
  • create new table as select * from old_table where ...如果我们要删除超过 50% 的数据,那么简单地删除新旧数据并将新数据重命名为旧数据会快得多。
  • exchanging您可以通过分区表中的分区来实现类似的目标。
  • 或者,如果您的表被明智地分区,您可以简单地删除表的分区
于 2013-09-12T08:23:28.680 回答