一外部联接+的用法
外部联接+按其在=的左边或右边分左联接和右联接若不带+运算符的表中的一个行不直接匹配于带+预算符的表中的任何行则前者的行与后者中的一个空行相匹配并被返回若二者均不带′+′则二者中无法匹配的均被返回利用外部联接+可以替代效率十分低下的 not in 运算大大提高运行速度例如下面这条命令执行起来很慢
select aempno from emp a where aempno not in
(select empno from emp where job=´sale´)
倘若利用外部联接改写命令如下
select aempno from emp a
emp b where aempno=bempno(+)
and bempno is null and bjob=´sale´
可以发现运行速度明显提高
二set transaction 命令的用法
在执行大事务时有时oracle会报出如下的错误
orasnapshot too old (rollback segment too small)
这说明oracle给此事务随机分配的回滚段太小了这时可以为它指定一个足够大的回滚段以确保这个事务的成功执行例如
set transaction use rollback segment
roll_abcdelete from table_name where ……commit
回滚段roll_abc被指定给这个delete事务commit命令则在事务结束之后取消了回滚段的指定
三使用索引的注意事项
selectupdatedelete 语句中的子查询应当有规律地查找少于%的表行如果一个语句查找的行数超过总行数的%它将不能通过使用索引获得性能上的提高
索引可能产生碎片因为记录从表中删除时相应也从表的索引中删除表释放的空间可以再用而索引释放的空间却不能再用频繁进行删除操作的被索引的表应当阶段性地重建索引以避免在索引中造成空间碎片影响性能在许可的条件下也可以阶段性地truncate表truncate命令删除表中所有记录也删除索引碎片
四数据库重建应注意的问题
在利用import进行数据库重建过程中有些视图可能会带来问题因为结构输入的顺序可能造成视图的输入先于它低层次表的输入这样建立视图就会失败要解决这一问题可采取分两步走的方法首先输入结构然后输入数据命令举例如下 (uesrnamejfclpasswordhfjfhost stingora数据文件expdatadmp)
imp jfcl/hfjf@ora file=empdatadmp rows=nimp
jfcl/hfjf@ora file=empdatadmp full=y buffer=
commit=y ignore=y
第一条命令输入所有数据库结构但无记录第二次输入结构和数据字节提交一次ignore=y选项保证第二次输入既使对象存在的情况下也能成功
五having 子句的用法
having 子句对 group by 子句所确定的行组进行控制having 子句条件中只允许涉及常量聚组函数或group by 子句中的列