请问下我现在有张千万级表现在要delete掉其中的300万,没有分区没有索引,那有什么可以优化执行的方法吗?
除了添加io设备块的方法。
------最佳解决方案--------------------
在回答一次
如果表未分区又有足够的磁盘空间,能否使用在线重定义的方法,把表转成分区表,然后把其中包含有300W左右的分区直接drop掉
------其他解决方案--------------------
create table temp as select * from 表 where 不想删的数据;
rename 表 to 其它;
rename temp to 表;
通过重命名的方法快点
------其他解决方案--------------------
把所有数据分割为几小块进行处理,这样做的好处是及时做事务提交,不至于占用系统太多资源
delete 语句使用parallel并行,删除数据,同时注意回滚段空间和redo切换频率控制
------其他解决方案--------------------
这种方法给力!
开启并行度、控制事务单位
------其他解决方案--------------------
换做我也这么干,但是为了防止一些想不到的意外发生
如:原表上有一些其他东西,如外键,主键,索引,触发器等
可以换个方式:
建一个表把不想删除的数据拿出来,因为这样可以用到索引,速度较快
然后 truncate 原表
最后 把数据insert 回去。
------其他解决方案--------------------
这个很好很强大正是我要的 谢啦 同是也谢谢各位给出的答案。