`
loamy
  • 浏览: 321004 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle查询优化

    博客分类:
  • db
阅读更多
在开发后台程序中,怎么样优化你的SQL语句使得你的后台程序能达到高效的目的,当然通过搜索这类相关文章有很多很多,这里本人写的是通过项目中总结出的十大主要SQL性能优化,希望在开发中能给大家一定的参考。

以下的实例中使用3个表 (TABLE) A(R1,R2,R3,R4,R5,C1,C2,B2) B(R1,B1,B2) C(R1,C1,C2,B2),括号中即为表中的字段 

一、使用特定表中的索引。
    有时候一个表中的数据量很大时候,索引是非常非常的重要,何为索引?我来举个例子,你一听就能明白,比如:你想搜索我的电脑中一个名字为FILE.TXT 文件,如果不知道该文件所在的目录(没有创建索引)情况下,基本上要扫描我的电脑中的所有盘符里的文件,如果你的硬盘中的有很多文件(相当一个表中有很多的数据),基本上是一个全盘扫描的过程,这时如果你告诉搜索,你的文件就在D盘的TEST目录下,这样来搜索速度将会大大的提高,给文件定位就相当一个索引。
    好了,知道索引是干什么之后,下面来看看怎么走正确的索引,才能达到最高效。假如A表中有两个索引IDX_R1 INDEX(R1,R2,R4,R5),IDX_R3 INDEX(R1,R3,R4,R5) 现在需要做这样的操作,显示表中的条件值是R1 = 1,R3 = 3,R4 =4的所有内容。通常我们会写出下面的查询语句。
    select * from A where R1 =1 and R3 =3 and R4;
按道理它走的索引是IDX_R3,有时候默认走的索引并不是你想象中的那样,特别是多表关联的情况下。所以我们进行指定一下索引,按我们真正想要的走的索引:
   select /*+ index(R1,IDX_R3) */* from A where R1 =1 and R3 =3 and R4;

二、在检索数据的时候两个表的关联查询效率低于使用EXISTS子句。
   SELECT  B.R1,B.B1,B.B2 FROM A,B WHERE A.R1 = B.R1;
   优化为:
   SELECT  B.R1,B.B1,B.B2 FROM B WHERE EXISTS(SELECT 1 FROM A WHERE A.R1 = B.R1);
   如果你在WINDOWS的ORACLE的平台可以使用PL/SQL中的执行计划(EXPLAIN PLAN),看一下相应的执行时间进行验证。

三、ORACLE的解析器是由右向左进行解析,所以在检索两个或以上表相关联的数据的时候,将数据量小的表放到最后让解析器优先解析。此方法在两个表的数据相差很大的情况下,会有点效果。

四、 使用EXISTS代替IN子句,同理用NOT EXISTS 代替NOT IN

因为使用IN子句作为一个查询条件后,ORACLE会将IN子句的数据先搜索出来以后,等结果集返回以后才作为一个条件值。而EXISTS语句是WHERE语句之前的数据优先检索完后在去检索EXISTS子句的内容。

五、如果有子句比较的情况下,将此比较语句放到WHERE后作为第一个条件。
如:

SELECT A.R2 FROM A WHERE B.B2 = 3 AND 2< SELECT COUNT(1) FROM B WHERE B.R1 = A.R1;  //效率较低

SELECT A.R2 FROM A WHERE 2< SELECT COUNT(1) FROM B WHERE B.R1 = A.R1 AND B.B2 = 3;  //效率较高

六、在写存储过程的时候,无论是执行UPDATE,还是执行INSERT,应该尽快的COMMIT。

七、在执行数据检索的过程中近可能少的访问同一个表。

在写存储过程的时候,有时候因为条件值不一样,通常需要多次的去访问同一个表,这个时候可以考虑一个使用DECODE函数来代替多个条件。

//1
SELECT SUM(Nvl(C2,0)) FROM C WHERE R1 = 12 AND C1 = 22 ;
//2
SELECT SUM(Nvl(C2,0)) FROM C WHERE R1 = 12 AND C1 = 33 ;

优化方法:
SELECT SUM(DECODE(C1,22,C2,33,C2,0) FROM C WHERE R1 =12 AND C1 IN(22,33);

八、在写条件的时候尽量在条件值的左边使用函数。
如:

SELECT * FROM A WHERE TO_CHAR(R5,'YYYYMM') = '200804'

应该使用

SELECT * FROM A WHERE R5 = TO_DATE('200804','YYYYMM');代替


九、UPDATE语句写法提高效率。

UPDATE A
SET C2 = (SELECT MAX(C2) FROM C),
    B2 = (SELECT MAX(B2) FROM C)
WHERE R1 = 1000;
高效:
UPDATE A
SET (C2, B2)
= (SELECT MAX(C2) , MAX(B2)
FROM C)
WHERE R1 = 1000;


十、用EXISTS替换DISTINCT.

例如:
//低效:
SELECT DISTINCT C.R1,C.B2
FROM A,C
WHERE A.R1 = C.R1 ;

//高效:
SELECT C.R1,C.B2
FROM C
WHERE EXISTS ( SELECT ‘X’
FROM A
WHERE A.R1 = C.R1);

EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果.
当然以上举例表是最简单的结构。
分享到:
评论
1 楼 PV_love 2011-08-24  
沙发一个,看的人多,没人顶

相关推荐

    Oracle查询优化改写技巧与案例2.zip

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...

    Oracle查询优化改写技巧与案例

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...

    《Oracle查询优化改写技巧与案例》PDF版本下载.txt

    根据提供的文件信息,本文将对《Oracle查询优化改写技巧与案例》这一主题进行详细的解析,涵盖Oracle查询优化的基本概念、重要性、改写技巧及其实际应用案例。 ### 一、Oracle查询优化概述 #### 1.1 查询优化定义 ...

    Oracle查询优化改写 技巧与案例.pdf

    Oracle查询优化是数据库管理中的重要环节,它直接关系到数据库的性能和响应速度。针对Oracle数据库的查询优化,本文件提供了丰富的技巧和案例分析,以帮助读者深入理解优化原理,并能在实际工作中学以致用。 首先,...

    Oracle查询优化改写-技巧与案例

    Oracle查询优化是数据库管理中的关键技能,尤其是在处理大型数据集时,有效的查询优化能显著提升系统性能,降低资源消耗。本书“Oracle查询优化改写-技巧与案例2.0”聚焦于这一主题,旨在为数据库管理员(DBA)和开发...

    oracle查询优化改写技巧与案例

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...

    Oracle查询优化改写 技巧与案例 .pdf

    其次,索引是优化查询的常用手段。Oracle支持B树索引、位图索引、函数索引等多种类型。选择合适的索引类型能显著提高查询速度。例如,对于选择性较低的列,位图索引可能更有效;而对于频繁更新的列,B树索引可能是更...

    Oracle查询优化改写 技巧与案例_高清带书签版本

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...

    oracle查询优化

    ### Oracle 查询优化详解 在数据库管理系统中,Oracle是一款非常成熟且功能强大的关系型数据库系统,广泛应用于企业级应用。为了提高系统的性能与响应速度,进行有效的Oracle查询优化至关重要。本文将从多个方面...

    oracle查询优化改写 技巧与案例

    ### Oracle查询优化改写技巧与案例 在数据库管理和开发领域,Oracle因其强大的功能、灵活性以及对大型企业级应用的支持而受到广泛青睐。然而,在实际应用过程中,如何有效地进行查询优化,提升系统的整体性能,成为...

    Oracle查询优化改写 技巧与案例

    在Oracle数据库管理中,查询优化是一项至关重要的任务,它直接影响到系统的性能和效率。Oracle查询优化改写技巧与案例涉及到如何通过改进SQL语句、利用索引、调整表设计和数据库参数来提升查询速度,降低资源消耗。...

    【oracle】oracle查询优化改写

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其性能优化是DBA(数据库管理员)和开发人员的关键技能之一。查询优化是性能优化的...优化查询不仅是提高系统响应时间的关键,也是保障业务平稳运行的基础。

    Oracle查询优化改写技巧与案例.rar

    本资料《Oracle查询优化改写技巧与案例》将深入探讨如何提升Oracle查询性能,通过实际案例来解析优化策略。 1. **执行计划分析** - SQL语句的执行计划是数据库执行SQL的详细步骤,理解执行计划有助于找到性能瓶颈...

    oracle查询优化pdf

    优化查询通常从编写高效的SQL语句开始,包括选择合适的索引、避免全表扫描、减少子查询以及合理使用JOIN操作。在Oracle中,理解执行计划至关重要,因为它是Oracle解析和执行SQL语句的方式。通过使用EXPLAIN PLAN或...

    Oracle查询优化改写技巧与案例 有教无类落落

    《Oracle查询优化改写技巧与案例》看点: # 字典式写作手法:不讲具体语法,没有简单知识堆砌,直接以案例形式讲技巧与案例 # 大量优化实战方法:将主要SQL优化点一一剖析,分享大量SQL优化的实际工作经验 # 50余...

    Oracle 查询优化,个人练习

    Oracle查询优化是数据库管理中的关键...以上是Oracle查询优化的一些核心要点,实践中还需要根据具体情况进行深入分析和测试,不断优化查询,以实现数据库的最佳性能。不断学习和实践是成为Oracle查询优化大师的关键。

Global site tag (gtag.js) - Google Analytics