ITPub博客

首页 > 数据库 > Oracle > 032.笔记:表的连接和其他高级调整技术(3.其他高级调整技术)(未完成。。。)

032.笔记:表的连接和其他高级调整技术(3.其他高级调整技术)(未完成。。。)

原创 Oracle 作者:limintjhn 时间:2013-01-06 19:56:39 0 删除 编辑

1.第三方性能调整工具
有时候,可借助第三方工具。尽管不能修改代码,但您可以修改索引的使用方法。

2.调整分布式查询
如果编写的不好,分布式查询(SQL中使用DBLINK)有候会成为灾难,并导致极其糟糕的性能。特别是一个分布式数据库两个结点上的两张表的嵌套循环连接会非常慢,因为Oracle
将所有的数据移到本地机器来处理(取决于查询语句)。
【技巧】当不能避免使用分布式查询的时候,使用IN子句,设置操作符(例如UNION,或者MINUS),并采用任何可以降低数据库结点间的网络拥塞的技术。所定的查询如果将引起分布
式结点间的数据循环,那么效率是极为低下的。

3.各种调整技术摘要
3.1外部表
【警告】外部表是Oracle是优秀的发明之一。您的聪明才智将使您在使用外部表时达到新的高度。但要小心:存储在数据库外的数据与存储在数据库内的数据在Oracle
的备份和安全管理功能上是不一样的。
3.2数据快照太旧:开发人员的编程难题
【技巧】除了一些典型的原因外,当开发人员修改正被选择的数据,或在提交查询的过程中获取数据,都将会引发数据快照太旧的错误。为修正这个问题,请关闭
引起问题的游标并再次打开它就行了。
3.3设置事件以转储每次等待
STATSPACK笔AWR可能是Oracle提供的最佳的性能优化工具。它们极方便地将所有数据集中到一张报表中供您分析使用。但是如果您有一个急待解决的项目。,需要完全
转储系统的行为,以便可以查看到系统的每一个等待,那该怎么办呢?如果V$视图所有等待的编译还不足以解决问题,而且您需要实时查看等待的话,答案就是使用非常
危险的系统事件设置(set event)10046。您也可以在会话级执行。
alter system set events '10046 trace name context forever,level 12';
alter system set events '10046 trace name context off';
alter session ...
【警告】在系统级使用10046事件可以实现等待的实时转储。但必须小心,因为在一个繁忙的系统上,此举将迅速侵占大量的空间。
3.4使用EXISTS操作符有效缩短时间
虽然Oracle优化器能很好地保证查询的有效性,但是您可以将多表连接修改为使用EXISTS操作符的子查询形式。只有当子查询中的表无法从select语句中选出任何内容的时候
才能这样做。
示例:(示例的目标是提取一行记录作为测试系统使用的测试数据)
select t.*
from table1 t,table2 t2
where t.id=t2.id and rownum=1;

--exists subquery
select t.*
from table1 t
where exists(
select 0
from table2 t2
where t.id=t2.id
)
and rownum=1;
从这个示例可以看到,代替连接表而使用EXISTS有着很大的优势。

4.在块级别进行调整
。。。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7901922/viewspace-1060014/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-02-03

  • 博文量
    53
  • 访问量
    36584