Java,J2EE,Weblogic,Oracle

java项目随笔
随笔 - 90, 文章 - 6, 评论 - 61, 引用 - 0
数据加载中……

oracle删除重复记录

删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

  delete
      from tb_user_add_serv_fee a
     where a.register_id in (select t.register_id
                               from tb_user_add_serv_fee t
                              where t.ubill_month = '201007'
                              group by t.register_id, t.region_no
                             having count(1) > 1)
         
       and rowid not in (select min(rowid)
                           from tb_user_add_serv_fee t
                          where t.ubill_month = '201007'
                          group by t.register_id
                         having count(1) > 1)
       and a.ubill_month = '201007';

Oracle删除重复记录的最好的方 法:
DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(y.ROWID)
FROM EMP y
WHERE y.EMPNO = E.EMPNO )

 

 

 

1、子查询找出某员工最低的ROWID(肯定只有一个),其它大于这条记录ROWID的,全部删除。

2、Oracle中使用ROWID删除重复记录最快,因为Rowid对应这条记录在磁盘上的位置

 

面试:性能 优化

规则:SELECT子句中避免使用 ‘ * ‘
规则:使用 exists语句代替in语句;
            使用not exists代替not in
规则:使用truncate代替delete from 表语句
规则:减少访 问数据库的次数
规 则:减少访问数据库的次数
规则:使用表的别名(Alias)
规则:尽快使用COMMIT
规则:数据库冗余字段的设计
其它:Oracle与性能有关的几个特征(三个缓冲区)

面试:企业为什么经常使用Oracle? Oracle为什么这么牛?
回答:从三个缓冲区入手
一、日志缓冲区
·在添加一条记录时,数据库在后台同时也要记录一条日志
·Oracle 能够先将日志写在内存中,缓冲区满后再一次性写入磁盘
二、块缓冲区
·如果一个表(如部门表)很少更新但经常使用,那么可以将该表保存 在内存中,从而避免频繁访问磁盘。
·访问内存的速度大于高于访问磁盘的速度。
三、SQL缓冲区
·数据库执行步骤:语法分 析、语义分析、编译、优化……
·所以SQL在执行以前所消耗的时间是很长的
·Oracle数据库会将sql保存在SQL缓冲区,如果 执行的是相同SQL,则无论执行多少次,都只会编译分析一次。从而减少分析和优化时
间。


原贴:http://mamaoyuan625.javaeye.com/blog/394796

posted on 2010-07-12 16:14 龚椿深 阅读(453) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: