`
cd0281
  • 浏览: 120563 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

oracle的一些调优建议(4)

阅读更多
24. 用>=替代>

如果DEPTNO上有一个索引,
高效:
  
SELECT *
   FROM EMP
   WHERE DEPTNO >=4

  
   低效:
  
SELECT *
   FROM EMP
   WHERE DEPTNO >3
    
两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.

25.用UNION替换OR (适用于索引列)

通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低.
   在下面的例子中, LOC_ID 和REGION上都建有索引.
高效:
  
SELECT LOC_ID , LOC_DESC , REGION
   FROM LOCATION
   WHERE LOC_ID = 10
   UNION
   SELECT LOC_ID , LOC_DESC , REGION
   FROM LOCATION
   WHERE REGION = “MELBOURNE”


低效:
  
SELECT LOC_ID , LOC_DESC , REGION
   FROM LOCATION
   WHERE LOC_ID = 10 OR REGION = “MELBOURNE”


如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面.
注意:
WHERE KEY1 = 10   (返回最少记录)
OR KEY2 = 20        (返回最多记录)

ORACLE 内部将以上转换为
WHERE KEY1 = 10 AND
((NOT KEY1 = 10) AND KEY2 = 20) 
   


26. 避免在索引列上使用IS NULL和IS NOT NULL

避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引 .对于单列索引,如果列包含空值,索引中将不存在此记录. 对于复合索引,如果每个列都为空,索引中同样不存在此记录. 如果至少有一个列不为空,则记录存在于索引中.
因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引.
举例:
低效: (索引失效)
SELECT …
FROM DEPARTMENT
WHERE DEPT_CODE IS NOT NULL;

高效: (索引有效)
SELECT …
FROM DEPARTMENT
WHERE DEPT_CODE >=0; 


27.总是使用索引的第一个列

如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引.
当仅引用索引的第二个列时,优化器使用全表扫描而忽略索引


28.用UNION-ALL 替换UNION ( 如果有可能的话)

当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序.
如果用UNION ALL替代UNION, 这样排序就不是必要了. 效率就会因此得到提高.
举例:
   低效:
    
SELECT ACCT_NUM, BALANCE_AMT
        FROM DEBIT_TRANSACTIONS
        WHERE TRAN_DATE = ’31-DEC-95’
        UNION
        SELECT ACCT_NUM, BALANCE_AMT
        FROM DEBIT_TRANSACTIONS
        WHERE TRAN_DATE = ’31-DEC-95’


高效:
      
 SELECT ACCT_NUM, BALANCE_AMT
        FROM DEBIT_TRANSACTIONS
        WHERE TRAN_DATE = ’31-DEC-95’
        UNION ALL
        SELECT ACCT_NUM, BALANCE_AMT
        FROM DEBIT_TRANSACTIONS
        WHERE TRAN_DATE = ’31-DEC-95’

注:
需要注意的是,UNION ALL 将重复输出两个结果集合中相同记录. 因此各位还是
要从业务需求分析使用UNION ALL的可行性.

29.使用提示(Hints)

对于表的访问,可以使用两种Hints.
FULL 和 ROWID
FULL hint 告诉ORACLE使用全表扫描的方式访问指定表.
例如:
  
SELECT /*+ FULL(EMP) */ *
   FROM EMP
   WHERE EMPNO = 7893;
   ROWID hint 告诉ORACLE使用TABLE ACCESS BY ROWID
的操作访问表.
   通常, 你需要采用TABLE ACCESS BY ROWID的方式特别是当访问大表的时候, 使用这种方式, 你需要知道ROIWD的值或者使用索引.
   如果一个大表没有被设定为缓存(CACHED)表而你希望它的数据在查询结束是仍然停留
在SGA中,你就可以使用CACHE hint 来告诉优化器把数据保留在SGA中. 通常CACHE hint 和 FULL hint 一起使用.
例如:
SELECT /*+ FULL(WORKER) CACHE(WORKER)*/ *
FROM WORK;

   索引hint 告诉ORACLE使用基于索引的扫描方式. 你不必说明具体的索引名称
例如:
  
SELECT /*+ INDEX(LODGING) */ LODGING
   FROM LODGING
   WHERE MANAGER = ‘BILL GATES’;

  
   在不使用hint的情况下, 以上的查询应该也会使用索引,然而,如果该索引的重复值过多而你的优化器是CBO, 优化器就可能忽略索引. 在这种情况下, 你可以用INDEX hint强制ORACLE使用该索引.
   ORACLE hints 还包括ALL_ROWS, FIRST_ROWS, RULE,USE_NL, USE_MERGE, USE_HASH 等等.
  
注:
   使用hint , 表示我们对ORACLE优化器缺省的执行路径不满意,需要手工修改.
这是一个很有技巧性的工作. 我建议只针对特定的,少数的SQL进行hint的优化.
对ORACLE的优化器还是要有信心(特别是CBO)



分享到:
评论

相关推荐

    Oracle性能调优实践中的几点心得

    当应用管理员向我们通告现在应用很慢、数据库很慢的时侯,我们到数据库时做几个示例的Select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为数据库的各种命种率都是满足Oracle文档的建议。

    oracle性能调优

    让Oracle跑得更快__Oracle_10g性能分析与优化主要针对oracle性能调优进行详细分析。并且该文档提供了很好的oracle性能优化建议。

    Oracle调优之初始化参数说明及建议

    Oracle调优之初始化参数说明及建议,很有用的数据库优化参考文档.供初级的朋友数据库调优参考.要上dba道路,从这里看起

    oracle游标溢出调优

    oracle游标溢出调优着眼点枚举。通过对相关数据字典和参数的分析,给出建议。

    Oracle管理艺术 中文版

    *以oracle公司提供的建议为主、关系型数据库的理论为辅,学习oracle数据库的工作原理。 *真正熟悉sga的内涵,进而提升oracle服务器的性能。 *像协奏曲那样,让oracle数据库相关文件彼此正常且有效率地分工协作。 *...

    Oracle sql 优化实例

    不错的东东,通俗易懂,建议学习.赶紧下载吧

    ORACLE19c数据库性能优化说明.docx

    orcale的sql调优

    数据库性能调优技术1索引调优.pdf

    数据库性能调优技术1索引调优,详细讲述了关于索引调优的方法建议

    Oracle AWR报告深入分析

    4、建议有兴趣的同学去学习一下 oracle plsql 编写技巧,能在 plsql 缩写技能与编程 思想上有所提升。 5、Awr 二个包的代码极其复杂,对学习者的 plsql 编写能力有要求。 6、对应的二个包还包括 ADDM,ASH 的源码,...

    Oracle Wait Interface性能诊断与调整实践指南

    oracle数据库的经典调优文档,建议dba深入阅读

    Oracle10,11g 巡检,调优。

    86.超过2g的segment(单个表超过2g建议使用分区表) 87.数据库长事务(执行超过6s) 88.产生大量物理读的进程 89.产生归档日志过快的进程 90.等待事件对应的sql语句 91.占用大量temp表空间的session和sql监控 92....

    DBA浅谈Oracle__EBS11i系统性能优化_U

    下面将在 Hardware (Server)、Disk I/O、Application、Oracle Database 提出 了一系列优化建议。本文档将对相关技术细节进行总结。 文档将包括如下主要内容: z Oracle Database 性能数据收集、分析和调优方法 z ...

    oracle_rac日常基本维护命令

    oracle rac日常基本维护命令 2 Oracle RAC性能调整 12 详解Oracle RAC入门和提高 27 ORACLE RAC数据库配置Dataguard环境 49 老白对于RAC应用调优的建议 51

    Spotlight_On_Oracle

    图形化、实时显示 Oracle Instance的活动状态 利用数据流、图形、颜色和声音等方式报警,识别系统问题 显示有关问题的详细信息,如活动的 Sessions、资源消耗大的SQL语句、Disk I/O以及...内置调优建议 与其它模块集成

    Toad_for_OracleV11常见疑问解答与常用技巧V1.0

    以下对TOAD有关疑问解答和技巧描述都是基于Toad for Oracle Xpert(Version 11.6.1.6,Toad for Oracle Xpert是Toad调优版,包括了专业版全部功能。额外增加了SQL调优功能。),如果与大家在实际工作中遇到情况有所...

    Oracle_Database_11g完全参考手册.part2/3

    通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...

    Oracle_Database_11g完全参考手册.part3/3

    通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...

    Oracle Wait Interface性能诊断与调整实践指南-中文版

    适合有一定oracle运维经验的人看的一本调优的好书,建议阅读。

    RHEL5.4+ORACLE11G+WEBLOGIC10.3集群安装部署手册

    详细讲述RHEL5.4+ORACLE11G+WEBLOGIC10.3各自安装步骤和集群步骤...包括资源中心系统部署结构,整体部署方案,性能调优建议三大部分,图文并茂,有详细步骤截图.非常适合初学者学习,也适合有一经验的工作者作为技术参考资料

    Oracle性能优化.doc

    Oracle性能优化是针对数据优化的一些方法和建议,里面讲解的很详细,从为什么要优化,讲到缓存,连接池,SGA,SQL调优,优化器等等。。对于有这方面需求的朋友来说,很有帮助的,也是很难得的。

Global site tag (gtag.js) - Google Analytics