Oracle数据库系统使用经验六则

日期: 2009-02-23 来源:TechTarget中国 英文

  1.having子句的用法

  having 子句对 group by 子句所确定的行组进行控制,having 子句条件中只允许涉及常量,聚组函数或group by 子句中的列.

  2.外部联接”+”的用法

  外部联接”+”按其在”=”的左边或右边分左联接和右联接.若不带”+”运算符的表中的一个行不直接匹配于带”+”预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回.若二者均不带´+´,则二者中无法匹配的均被返回.利用外部联接”+”,可以替代效率十分低下的 not in 运算,大大提高运行速度.例如,下面这条命令执行起来很慢

         


select a.empno from emp a where a.empno not in 
  (select empno from emp1 where job=´SALE´);
 
   倘若利用外部联接,改写命令如下:

       


  select a.empno from emp a ,emp1 b 
  where a.empno=b.empno(+)
  and b.empno is null
  and b.job=´SALE´;
 
   可以发现,运行速度明显提高.

  3.删除表内重复记录的方法

  可以利用这样的命令来删除表内重复记录:

        


 delete from table_name a 
  where rowid< (select max(rowid) from table_name
  where column1=a.column1 and column2=a.column2
  and colum3=a.colum3 and …);
 
  —- 不过,当表比较大(例如50万条以上)时,这个方法的效率之差令人无法忍受,需要另想办法(可参看拙文《电信计费中长途重复话单的技术处理》,《计算机与通信》,1999-07).

  4.set transaction 命令的用法

  在执行大事务时,有时oracle会报出如下的错误:

  ORA-01555:snapshot too old (rollback segment too small)

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐