Oracle 数据库系统使用经验六则
展开全部
having 子句的用法 having 子句对 group by 子句所确定的行组进行控制 having 子句条件中只允许涉及常量 聚组函数或group by 子句中的列 外部联接 + 的用法 外部联接 + 按其在 = 的左边或右边分左联接和右联接 若不带 + 运算符的表中的一个行不直接匹配于带 + 预算符的表中的任何行 则前者的行与后者中的一个空行相匹配并被返回 若二者均不带 + 则二者中无法匹配的均被返回 利用外部联接 + 可以替代效率十分低下的 not in 运算 大大提高运行速度 例如 下面这条命令执行起来很慢 select a empno from emp a where a empno not in(select empno from emp where job= SALE ); 倘若利用外部联接 改写命令如下: select a empno from emp a emp b where a empno=b empno(+) and b empno is null and b job= SALE ; 可以发现 运行速度明显提高 删除表内重复记录的方法 可以利用这样的命令来删除表内重复记录: delete from table_name a where rowid< (select max(rowid) from table_name where column =lumn and column =lumn and colum =lum and ); 不过 当表比较大(例如 万条以上)时 这个方法的效率之差令人无法忍受 需要另想办法(可参看拙文《电信计费中长途重复话单的技术处理》 《计算机与通信》 ) set transaction 命令的用法 在执行大事务时 有时oracle会报出如下的错误: ORA :snapshot too old (rollback segment too *** all) 这说明oracle给此事务随机分配的回滚段太小了 这时可以为它指定一个足够大的回滚段 以确保这个事务的成功执行 例如 set transaction use rollback segment roll_abc;delete from table_name where mit; 回滚段roll_abc被指定给这个delete事务 mit命令则在事务结束之后取消了回滚段的指定 使用索引的注意事项 select update delete 语句中的子查询应当有规律地查找少于 %的表行 如果一个语句查找的行数超过总行数的 % 它将不能通过使用索引获得性能上的提高 索引可能产生碎片 因为记录从表中删除时 相应也从表的索引中删除 表释放的空间可以再用 而索引释放的空间却不能再用 频繁进行删除操作的被索引的表 应当阶段性地重建索引 以避免在索引中造成空间碎片 影响性能 在许可的条件下 也可以阶段性地truncate表 truncate命令删除表中所有记录 也删除索引碎片 数据库重建应注意的问题 在利用import进行数据库重建过程中 有些视图可能会带来问题 因为结构输入的顺序可能造成视图的输入先于它低层次表的输入 这样建立视图就会失败 要解决这一问题 可采取分两步走的方法:首先输入结构 然后输入数据 命令举例如下 (uesrname:jfcl password:hfjf host sting:ora 数据文件:expdata dmp): imp jfcl/hfjf@ora file=empdata dmp rows=Nimp jfcl/hfjf@ora file=empdata dmp full=Y buffer= mit=Y ignore=Y 第一条命令输入所有数据库结构 但无记录 第二次输入结构和数据 字节提交一次 ignore=Y选项保证第二次输入既使对象存在的情况下也能成功 lishixinzhi/Article/program/Oracle/201311/17776
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询