`
ruilin215
  • 浏览: 1143322 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

SQL性能优化调整的几点基础事项_oracle

 
阅读更多

1. 选择最有效率的表名顺序
SQL的解析器按照从右到左的顺序处理FROM子句中的表名, FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。

例如:
表 TAB1 16,384条记录 表 TAB2 1条记录
选择TAB2作为基础表 (最好的方法):
select count(*) from tab1,tab2 ----执行时间0.96秒
选择TAB1作为基础表 (不佳的方法):
select count(*) from tab2,tab1 ----执行时间26.09秒

2. 3个以上的表连接查询
如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。

例如:
EMP表描述了LOCATION表和CATEGORY表的交集
SELECT *FROM LOCATION L , CATEGORY C, EMP E
WHERE E.EMP_NO BETWEEN 1000 AND 2000
AND E.CAT_NO = C.CAT_NO
AND E.LOCN = L.LOCN

3. WHERE子句中的连接顺序

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

例如:
(低效,执行时间156.3秒)
SELECT … FROM EMP E
WHERE SAL > 50000
AND JOB = ‘MANAGER’
AND 25 < (SELECT COUNT(*) FROM EMP
WHERE MGR=E.EMPNO);

(高效,执行时间10.6秒)
SELECT …
FROM EMP E
WHERE 25 < (SELECT COUNT(*) FROM EMP
WHERE MGR=E.EMPNO)
AND SAL > 50000
AND JOB = ‘MANAGER’;

4. 使用oracle自带函数提高效率
使用DECODE函数来减少处理时间,可以避免重复扫描相同记录或重复连接相同的表.

例如:
SELECT COUNT(*),SUM(SAL)
FROM EMP
WHERE DEPT_NO = 0020
AND ENAME LIKE ‘SMITH%’;
SELECT COUNT(*),SUM(SAL)
FROM EMP
WHERE DEPT_NO = 0030
AND ENAME LIKE ‘SMITH%’;

你可以用DECODE函数高效地得到相同结果:
SELECT COUNT(DECODE(DEPT_NO,0020,’X’,NULL)) D0020_COUNT,
COUNT(DECODE(DEPT_NO,0030,’X’,NULL)) D0030_COUNT,
SUM(DECODE(DEPT_NO,0020,SAL,NULL)) D0020_SAL,
SUM(DECODE(DEPT_NO,0030,SAL,NULL)) D0030_SAL
FROM EMP WHERE ENAME LIKE ‘SMITH%’;

5. 用Where子句替换HAVING子句
避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。

HAVING 中的条件一般用于对一些集合函数的比较,如COUNT() 等等. 除此而外,一般的条件应该写在WHERE子句中

6. 使用表的别名(Alias)
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.
Column歧义指的是由于SQL中不同的表具有相同的Column名,当SQL语句中出现这个Column时,SQL解析器无法判断这个Column的归属.

7. 用表连接替换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’ ;

8. 识别’低效执行’的SQL语句
使用TKPROF 工具来查询SQL性能状态
SQL trace 工具收集正在执行的SQL的性能状态数据并记录到一个跟踪文件中. 这个跟踪文件提供了许多有用的信息,例如解析次数.执行次数,CPU使用时间等.这些数据将可以用来优化你的系统。
EXPLAIN PLAN 分析SQL语句:
EXPLAIN PLAN 是一个很好的分析SQL语句的工具,它甚至可以在不执行SQL的情况下分析语句. 通过分析,我们就可以知道ORACLE是怎么样连接表,使用什么方式扫描表(索引扫描或全表扫描)以及使用到的索引名称。

9. 用索引提高效率
索引是表的一个概念部分,用来提高检索数据的效率. 实际上,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 同样在联结多个表时使用索引也可以提高效率. 另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证.


虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.

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

低效:
SELECT *
FROM EMP
WHERE DEPTNO >3

11. 用UNION替换OR (适用于索引列)
通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低
例如:
高效:
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”


分享到:
评论

相关推荐

    Oracle sql 性能优化调整

    Oracle SQL性能优化调整是数据库管理员和开发人员在日常工作中经常面临的重要任务,它涉及到数据库查询速度的提升,资源利用率的优化以及系统整体性能的改善。本文将深入探讨Oracle数据库SQL性能优化的关键点,并...

    《oracle SQL性能优化》中文电子书

    《Oracle SQL性能优化》这本书将详细解释以上各个知识点,并通过实例演示如何实践这些优化策略。配合压缩包中的"Oracle optimizer.chm"文件,读者可以获得更深入的技术细节和具体操作步骤。这个CHM文件可能包含了...

    Oracle SQL 性能优化调整

    ### Oracle SQL 性能优化调整:关键知识点详解 在企业级应用中,Oracle数据库作为核心的数据存储和处理引擎,其性能直接影响着整个系统的响应速度和稳定性。为了提升Oracle SQL的执行效率,以下几点是关键的优化...

    高清完整版 Oracle 高性能SQL引擎剖析SQL优化与调优机制详解

    为了深入理解Oracle SQL优化与调优机制,需要掌握以下几个核心知识点。 首先,要掌握Oracle SQL的基本原理。SQL是结构化查询语言的简称,是数据库管理系统进行数据查询和操作的标准语言。Oracle SQL的执行包含两个...

    ORACLE SQL性能优化

    ### Oracle SQL性能优化详解 #### 一、优化器种类及其设置 在Oracle SQL性能优化过程中,选择合适的优化器至关重要。Oracle提供了三种类型的优化器:基于规则的优化器(Rule-based Optimizer, RBO),基于成本的优化...

    ORACLE_SQL性能优化(全)

    【ORACLE SQL性能优化全解析】 SQL性能优化是数据库管理中的关键环节,尤其在ORACLE数据库环境下,理解和掌握SQL执行过程、优化器运作以及执行计划分析对于提升系统性能至关重要。以下将详细介绍这些核心知识点。 ...

    oracle_sql性能优化

    Oracle SQL性能优化是数据库管理中的关键环节,尤其对于初学者来说,掌握这些基础知识至关重要。本文将深入探讨优化器的选择、访问表的方式以及SQL语句的共享,以提升SQL查询的效率。 1. **优化器的选择** Oracle ...

    oracle_resource.rar_oracle_oracle_resource

    "oracle_resource.rar_oracle_oracle_resource"这个主题聚焦于找出Oracle数据库中最消耗系统资源的任务或SQL语句。通过对资源占用进行深入分析,我们可以识别性能瓶颈,进而采取针对性的优化措施。 资源占用查询....

    oracle性能优化最佳实践

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

    Oracle SQL性能优化

    ### Oracle SQL性能优化 在数据库管理和维护过程中,SQL查询的性能优化是非常重要的环节之一,它直接影响到系统的响应时间和资源消耗。对于使用Oracle数据库的应用来说,掌握一些有效的SQL优化技巧是必不可少的。...

    oracle性能优化的资料(打包)

    oracle性能优化的资料(打包),包括如下: 1.sql性能的调整-总结.pdf 2.PLSQL高级编程资料.pdf 3.Oracle性能调优实践中的几点心得.doc 4.oracle性能优化.doc 5.oracle_sql性能优化.doc

    Statement_Tracer_for_Oracle

    这款软件的主要功能是帮助用户查看并记录执行的SQL语句,从而提供了一个深入洞察数据库操作的窗口,对于数据库性能优化、问题排查以及审计等方面具有重要的作用。 Oracle数据库是全球广泛使用的大型关系型数据库...

    压测Oracle的SQL语句的性能情况

    文件名"Oracle_Sqltest"可能包含了各种用于测试的SQL语句,这些语句可能是常见的查询、插入、更新或删除操作,也可能包括复杂的联接、子查询和聚合函数,这些都是性能测试中的常见场景。 在进行Oracle SQL语句的...

    Oracle-jiaocheng.rar_oracle_oracle 10gjiaocheng_oracle jiaocheng

    8. **Oracle性能优化**:学习使用Oracle的性能分析工具,如SQL*Plus、 tkprof 和 explain plan,以及索引优化、查询优化和内存结构调整。 9. **集群与高可用性**:了解Oracle RAC(Real Application Clusters)技术...

    基于ORACLE数据库的SQL性能优化.pdf

    本文将基于该文档内容,详细解读Oracle数据库SQL性能优化涉及的关键知识点。 首先,文档强调了数据库系统在信息系统中的重要性。数据库不仅包含了数据,还涉及到数据的存储、查询、更新和维护,这些操作的效率直接...

    ORACLE数据库中SQL优化解析.pdf

    在企业信息化建设过程中,数据库管理系统的性能优化至关重要,尤其是SQL语句的执行效率。SQL(结构化查询语言)是数据库中进行数据操作的主要手段,其执行效率直接关系到整个信息系统性能的高低。在ORACLE数据库中,...

    oracledba.rar_oracle_oracle practice

    6. **性能优化**:通过分析SQL语句执行计划、调整索引、优化表分区等方式提高数据库性能。AWR(自动工作负载repository)和ASH(活动会话历史)是常用的性能监控工具。 7. **安全与权限管理**:创建用户、分配权限...

    Java高端培训系列教材_Oracle实用教程_数据库设计

    同时,学习性能监控工具(如Oracle Enterprise Manager),以及如何通过调整参数、分区、物化视图等手段进行性能优化。 9. 数据库备份与恢复:理解Oracle的备份策略,包括冷备份、热备份、逻辑备份等,以及如何在...

    优化sql语句执行效率几点注意事项

    在数据库管理中,SQL语句的执行效率是关键因素之一,尤其对于大数据量的应用来说,优化SQL性能至关重要。本文将详细探讨几个关于优化SQL语句执行效率的重要注意事项,旨在帮助数据库管理员和开发者提升系统性能。 ...

Global site tag (gtag.js) - Google Analytics