`

ORACLE性能优化(五/六)

阅读更多
17. 使用表的别名(Alias)

当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.


(译者注: Column歧义指的是由于SQL中不同的表具有相同的Column名,当SQL语句中出现这个Column时,SQL解析器无法判断这个Column的归属)


18. 用EXISTS替代IN

在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.


低效:

SELECT *

FROM EMP (基础表)

WHERE EMPNO > 0

AND DEPTNO IN (SELECT DEPTNO

FROM DEPT

WHERE LOC = ‘MELB')


高效:

SELECT *

FROM EMP (基础表)

WHERE EMPNO > 0

AND EXISTS (SELECT ‘X'

FROM DEPT

WHERE DEPT.DEPTNO = EMP.DEPTNO

AND LOC = ‘MELB')


(译者按: 相对来说,用NOT EXISTS替换NOT IN 将更显著地提高效率,下一节中将指出)



19. 用NOT EXISTS替代NOT IN

在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.


例如:

SELECT …

FROM EMP

WHERE DEPT_NO NOT IN (SELECT DEPT_NO

FROM DEPT

WHERE DEPT_CAT='A');


为了提高效率.改写为:


(方法一: 高效)

SELECT ….

FROM EMP A,DEPT B

WHERE A.DEPT_NO = B.DEPT(+)

AND B.DEPT_NO IS NULL

AND B.DEPT_CAT(+) = ‘A'



(方法二: 最高效)

SELECT ….

FROM EMP E

WHERE NOT EXISTS (SELECT ‘X'

FROM DEPT D

WHERE D.DEPT_NO = E.DEPT_NO

AND DEPT_CAT = ‘A');
20. 用表连接替换EXISTS


通常来说 , 采用表连接的方式比EXISTS更有效率

SELECT ENAME

FROM EMP E

WHERE EXISTS (SELECT ‘X'

FROM DEPT

WHERE DEPT_NO = E.DEPT_NO

AND DEPT_CAT = ‘A');


(更高效)

SELECT ENAME

FROM DEPT D,EMP E

WHERE E.DEPT_NO = D.DEPT_NO

AND DEPT_CAT = ‘A' ;


(译者按: 在RBO的情况下,前者的执行路径包括FILTER,后者使用NESTED LOOP)



21. 用EXISTS替换DISTINCT

当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换


例如:

低效:

SELECT DISTINCT DEPT_NO,DEPT_NAME

FROM DEPT D,EMP E

WHERE D.DEPT_NO = E.DEPT_NO

高效:

SELECT DEPT_NO,DEPT_NAME

FROM DEPT D

WHERE EXISTS ( SELECT ‘X'

FROM EMP E

WHERE E.DEPT_NO = D.DEPT_NO);


EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果.



22. 识别'低效执行'的SQL语句


用下列SQL工具找出低效SQL:

SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,

ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,

ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,

SQL_TEXT

FROM V$SQLAREA

WHERE EXECUTIONS>0

AND BUFFER_GETS > 0

AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8

ORDER BY 4 DESC;


(译者按: 虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法)



23. 使用TKPROF 工具来查询SQL性能状态


SQL trace 工具收集正在执行的SQL的性能状态数据并记录到一个跟踪文件中. 这个跟踪文件提供了许多有用的信息,例如解析次数.执行次数,CPU使用时间等.这些数据将可以用来优化你的系统.


设置SQL TRACE在会话级别: 有效


ALTER SESSION SET SQL_TRACE TRUE


设置SQL TRACE 在整个数据库有效仿, 你必须将SQL_TRACE参数在init.ora中设为TRUE, USER_DUMP_DEST参数说明了生成跟踪文件的目录


(译者按: 这一节中,作者并没有提到TKPROF的用法, 对SQL TRACE的用法也不够准确, 设置SQL TRACE首先要在init.ora中设定TIMED_STATISTICS, 这样才能得到那些重要的时间状态. 生成的trace文件是不可读的,所以要用TKPROF工具对其进行转换,TKPROF有许多执行参数. 大家可以参考ORACLE手册来了解具体的配置. )
分享到:
评论

相关推荐

    oracle数据库性能优化.pdf

    除了上述两点,Oracle性能优化还包括索引的建立与管理,分区策略的运用,回滚段的优化,以及查询执行计划的控制等。索引能加速数据检索,但过度的索引会增加写操作的开销,需权衡利弊。分区策略可将大表分解,提高...

    Oracle性能优化与故障诊断案例分享

    Oracle数据库性能优化与故障诊断是数据库管理中极为重要的两个方面,它们直接关系到企业业务系统的稳定运行和性能表现。在这篇文章中,我们将详细探讨针对Oracle数据库性能问题和故障的诊断案例,并分享如何通过案例...

    Oracle性能优化求生指南

    本书以系统而有效的方式详细阐述了...此书太大,分了五部分压缩上传,下载时只要把Oracle性能优化求生指南(完整版).part1.rar到Oracle性能优化求生指南(完整版).part5.rar都下载后,解压其中一个就是完整的版本。

    Oracle性能优化绝版好书:高级OWI与ORACLE性能调整

    《Oracle性能优化绝版好书:高级OWI与ORACLE性能调整》这本书深入探讨了Oracle数据库性能优化的关键技术和策略,特别关注了Oracle Wait Interface (OWI)和性能调整的实践应用。OWI是Oracle数据库中用于监控和诊断...

    ORACLE SQL性能优化系列

    ORACLE SQL性能优化系列 ORACLE SQL性能优化是数据库管理员和开发者非常关心的一个话题。为了提高数据库的性能,ORACLE 提供了多种优化技术。下面我们将详细介绍 ORACLE SQL 性能优化系列中的一些重要知识点。 一...

    ORACLE性能优化工具整理

    Oracle性能优化工具整理 Oracle数据库作为全球广泛使用的商业数据库管理系统,其性能优化对于确保数据库稳定运行、提高应用响应速度至关重要。性能优化不仅需要通过合理设计数据库模式、编写高效SQL语句等手段,而且...

    Oracle性能优化指南

    很抱歉,您提供的文件内容中,关于《Oracle性能优化指南》的标题和描述没有提供具体的详细信息,仅有标题和重复的描述,以及一个与主题无关的Java学习群信息。这不足以形成完整的知识点。为了生成知识点,我需要您...

    oracle性能优化技术内幕

    Oracle性能优化是数据库管理员和开发人员在处理Oracle数据库系统时不可或缺的重要技能。Oracle数据库作为业界广泛使用的数据库管理系统,其性能优化对于提升系统响应速度、降低资源消耗和改善用户体验至关重要。以下...

    Oracle性能优化技巧

    ### Oracle性能优化技巧详解 #### 一、引言 Oracle数据库是企业级应用中的核心组件之一,其性能直接影响到业务系统的稳定性和响应速度。本文将详细介绍Oracle性能优化的关键技巧,帮助用户更好地理解和掌握如何...

    oracle性能优化-比较全面

    Oracle性能优化是一个涵盖广泛且至关重要的主题,对于数据库的高效运行和企业级应用的性能提升起着决定性作用。本文将深入探讨Oracle性能优化的两个关键方面:SGA(System Global Area)的Shared Pool优化和Buffer ...

    Oracle性能优化求生指南(扫描版)1/3

    Oracle性能优化求生指南 分卷1/3

    oracle性能优化最佳实践

    本文旨在深入探讨Oracle数据库性能优化的最佳实践,包括数据库性能基础、调优方法论、SQL语句调优以及Oracle性能优化解决方案,帮助数据库管理员(DBA)和开发者提升数据库系统的整体效能。 ### 数据库性能基础及调优...

    Oracle性能优化技术内幕part_3

    Oracle性能优化技术是数据库管理员和开发人员在处理大型复杂系统时必须掌握的关键技能。这部分内容主要探讨Oracle数据库的性能调优策略,分为四个部分,本文将聚焦于第三部分。在这个阶段,我们通常会深入到数据库的...

    Oracle性能优化求生指南1

    《Oracle性能优化求生指南》本书作者凭借其20多年的丰富经验,为我们带来了一本系统的、全面的Oracle性能优化手册,用结构化方法帮助读者解决从数据库应用到数据库设计的所有问题。全书分为6部分、23章,实例丰富,...

    EBS性能调优之全面挖掘_V4.2(ebs性能优化、oracle性能优化、linux性能优化)

    数据库层优化主要包括两个方面:实例性能优化和SQL语句性能优化。实例优化涉及内存配置、后台进程调整和初始化参数设置,以确保数据的高效读写和处理。SQL优化则侧重于通过分析SQL执行计划,识别慢查询并应用索引、...

    经典书籍:Oracle性能优化技术内幕

    《Oracle性能优化技术内幕》是一本深入探讨Oracle数据库性能调优的专业书籍,旨在帮助数据库管理员、开发人员以及系统架构师理解和解决Oracle数据库在运行过程中可能出现的性能问题。这本书全面覆盖了Oracle性能优化...

    oracle性能优化学习心得

    Oracle性能优化是一个复杂而精细的过程,它涉及到数据库的多个层面,包括硬件配置、数据库设计、SQL语句优化以及系统参数调整。以下是对标题和描述中所述知识点的详细说明: 一、优化总原则 1. 系统使用情况的监控...

Global site tag (gtag.js) - Google Analytics