Oracle删除1300万数据,执行时间太长

编程界加藤鹰 发布于 2017/09/04 17:11
阅读 494
收藏 1

使用delete删除大数据量(1300万),执行速度太慢,如何让其执行时间减少 

加载中
1
DeMoNHaDeS
DeMoNHaDeS

大表删除数据,通常采用以下步骤:

1、新建一张结构相同的表。

2、插入不需要删除的数据。

3、删除或改名原表,将新表改名。

 

 

DeMoNHaDeS
DeMoNHaDeS
回复 @编程界加藤鹰 : mysql - innodb 单线程操作情况下应该只会锁行
编程界加藤鹰
回复 @DeMoNHaDeS : 写了一个程序,但是不停的锁表,所以没用分开删
DeMoNHaDeS
DeMoNHaDeS
回复 @编程界加藤鹰 : 也遇到过直接删大表的情况,不过时间要求不紧急,这种情况写个程序,每次批量查出1300万的一部分,比如100条,删除这100条。不过这个程序要执行几十甚至上百个小时。一次短时间内删除大量数据,从理论上应该也比较难实现
编程界加藤鹰
回复@DeMoNHaDeS : 方法很好,但是我这里不合适
0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

分开删除吧,不要一次删除那么多

0
如比如比
如比如比

取决于总件数的多少,比如对于1301万和3000万手段是不一样的。

0
mlovewt
mlovewt
分批删除,把需要删除的rowid放到一个表里,然分批删除
0
会哭的鳄鱼
会哭的鳄鱼
delete会生成回退日志。所以会比较慢。可以在delete后加 no logging,删除的数据不能回退。还有一个命令truncate直接删除表里所有数据,速度最快,删除的数据不能回退。
0
乌龟壳
乌龟壳
如果经常要删,分区吧,一次truncate一个对应分区秒秒钟的事。除非你要删的数据很随机,那我觉得可能是表结构和对表的操作逻辑有问题
返回顶部
顶部