Oracle数据库琐屑运用阅历六则

  根源:网海拾贝 




1.having 子句的用法

  having 子句对 group by 子句所确定的行组举办节制,having 子句前提中只应允触及常量,聚组函数或group by 子句中的列.

  2.外部联接" "的用法

  外部联接" "按其在"="的左边或左边分左联接和右联接.若不带" "运算符的表中的一个行不直接婚配于带" "预算符的表中的任何行,则前者的行与后者中的一个空行相婚配并被前往.若二者均不带’ ’,则二者中无法婚配的均被前往.利用外部联接" ",可以替换效用特别极度低下的 not in 运算,年夜年夜行进运转速率.例如,上面这条饬令实行起来很慢

  4.set transaction 饬令的用法

  在实行年夜事情时,有心oracle会报出如下的错误:   

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

  这阐明');oracle给此事情随机分拨的回滚段太小了,这时可以为它指定一个富裕年夜的回滚段,以确保这个事情的告成实行.例如   

  set transaction use rollback segment roll_abc;  

  delete from table_name where ...

  commit;

  回滚段roll_abc被指定给这个delete事情,commit饬令则在事情停止之后作废了回滚段的指定.

  5.运用索引的注意事情

  select,update,delete 语句中的子盘考该当有规律地查找少于20%的表行.要是一个语句查找的行数逾越总行数的20%,它将不能颠末过程运用索引取得功效上的行进.

  索引能够孕育产生碎片,由于记录从表中删除时,响应也从表的索引中删除.表开释的空间可以再用,而索引开释的空间却不能再用.频繁举办删除操作的被索引的表,该当阶段性地重修索引,以阻止在索引中形成空间碎片,影响功效.在应允的前提下,也可以阶段性地truncate表,truncate饬令删除表中全部记录,也删除索引碎片.

  6.数据库重修应注意的成绩

  外利用import举办数据库重修过程中,有些视图能够会带来成绩,由于结构输入的递次递次能够形成视图的输入先于它低层次表的输入,多么确立视图就会失败.要处置惩罚这一成绩,可采取分两步走的法子:首先输入结构,然后输入数据.饬令举例如下 (uesrname:jfcl,password:hfjf,host sting:ora1,数据文件:expdata.dmp):   

  imp jfcl/hfjf@ora1 file=empdata.dmp rows=N   

  imp jfcl/hfjf@ora1 file=empdata.dmp full=Y buffer=64000   

  commit=Y ignore=Y

  第一条饬令输入所有数据库结构,但无记录.第二次输入结构和数据,64000字节提交一次.ignore=Y选项担保第二次输入既使对象存在的情况下也能告成.  

  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万条以上)时,这个法子的效用之差令人无法忍耐,需求另想法子




版权声明: 原创作品,应允转载,转载时请务必以超链接体例标明文章 原始出处 、作者信息和本声明。不然将追究法律责任。

posted @ 2011-03-07 20:12  蓝色的天空III  阅读(163)  评论(0编辑  收藏  举报