`
CharlesCui
  • 浏览: 418144 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle删除数据减少IO的方法

阅读更多
今天有个表有很多数据需要删除,DBA很忙,我就自己动手了

delete from crm_customer t where t.corporation_id in (xxx,xxx,xxx,xxx.......xxx);


运行后发现数据库的CPU都消耗在了IOWait上面,我还以为是别人也在用这台机器作压力测试呢,东打听西打听没发现问题,结果DBA一个电话打来,说删除数据要这么做:

begin
for i in 90000018 .. 90000151 loop
 delete from crm_customer t where t.corporation_id = i;
 commit; 
end loop;
end;


而我那样做要回滚的数据太多,IO要求很高。

哈哈,又学了一手
分享到:
评论
9 楼 hellas 2008-04-11  
抛出异常的爱 写道

我们DBA常说的表截断不知道是不是不用回滚内存?

不是
8 楼 xiaoych 2008-04-10  
个人感觉2楼的方法不错啊,呵呵
7 楼 抛出异常的爱 2008-04-09  

我们DBA常说的表截断不知道是不是不用回滚内存?
6 楼 Fenng 2008-04-09  
这个 DBA 告诉你的方法也一般,弄不好就出事情
5 楼 hellas 2008-04-07  
魔力猫咪 写道
in是不能使用索引的。你应该使用or。即id = ??? or id =???这样的方式。你的问题是因为没应用到索引造成全表扫描。DBA给出的问题是一旦一个删除失败,会造成事务不完整。把commit移出循环比较好。不过你这种情况能具体知道每个id,所以即使事务失败也没什么。不过别的情况下绝对不能这么用。不然造成数据不完整的化,你怎么维护。

in也是有可能用索引的,例如:
lubo@LUBO> drop table t;

Table dropped.

lubo@LUBO> create table t(x int);

Table created.

lubo@LUBO> create index i on t(x);

Index created.

lubo@LUBO> insert into t(x) values(1);

1 row created.

lubo@LUBO> insert into t(x) values(2);

1 row created.

lubo@LUBO> commit;

Commit complete.

lubo@LUBO> set autotrace on exp
lubo@LUBO> select * from t;

         X
----------
         1
         2


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (FULL) OF 'T'



lubo@LUBO> select * from t where x in (1,2);

         X
----------
         2
         1


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   CONCATENATION
   2    1     INDEX (RANGE SCAN) OF 'I' (NON-UNIQUE)
   3    1     INDEX (RANGE SCAN) OF 'I' (NON-UNIQUE)



lubo@LUBO>
4 楼 rkihabara 2008-04-04  
问题出在 in 上
3 楼 魔力猫咪 2008-04-03  
in是不能使用索引的。你应该使用or。即id = ??? or id =???这样的方式。你的问题是因为没应用到索引造成全表扫描。DBA给出的问题是一旦一个删除失败,会造成事务不完整。把commit移出循环比较好。不过你这种情况能具体知道每个id,所以即使事务失败也没什么。不过别的情况下绝对不能这么用。不然造成数据不完整的化,你怎么维护。
2 楼 hellas 2008-04-02  
删个一百多条记录有这么慢吗?估计是楼主没建索引吧。另外,那个dba推荐的做法实际是最不值得推荐的,oracle里面最不好的做法就是经常commit。
1 楼 buaawhl 2008-03-31  

不能这样用吗?

delete from crm_customer t
where
t.corporation_id >= 90000018
and t.corporation_id <= 90000151

相关推荐

    ORACLE9i_优化设计与系统调整

    §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1 数据文件 26 §1.2.2 控制文件 26 §1.2.3 重做日志文件 26 §1.2.4 其它支持文件 26 §...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    SQL性能优化

    说明:对查询结果进行排序会大大的降低系统的性能,group与union都会对数据作排序,要耗费较多的内存,视状况用union all既可,不然有时数据太大又要进行union的排序,会导致Oracle数据库SORT_AREA_SIZE不足发生系统...

    JAVA上百实例源码以及开源项目源代码

     这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...

    Toad 使用快速入门

    可以修改表的各种逻辑和物理属性,修改列的属性,增加列,删除列(在Oracle8i里面),修改表的物理存储属性,Truncate,Drop等。 iii. 可以生成建表的完整的DDl语句,包括存储信息,权限信息,约束,索引和触发器等,...

    超级有影响力霸气的Java面试题大全文档

    此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),...

    java 面试题 总结

    此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),...

    JAVA上百实例源码以及开源项目

     这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包2

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包7

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics