Oracle中SQL语句的十大优化
在开发后台程序中,怎么样优化你的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核心模块将在子查询的条件一旦满足后,立刻返回结果.
本内容来自:http://bbs.linuxpk.com/viewthread.php?tid=14015&pid=48859&page=1&extra=page%3D1#pid48859
分享到:
相关推荐
Oracle 大数据量操作性能优化 Oracle大数据量操作性能优化是指在处理大量数据时,如何提高 Oracle 数据库的性能。该优化技术涉及到多个方面,包括分区、Direct Insert、并行和排序处理等。 分区是 Oracle 中的一种...
Oracle大数据量操作优化
Oracle 10g 数据库海量数据分页查询优化 本文主要介绍 Oracle 10g 数据库中的一种优化的海量数据分页查询解决方案。该方案通过分析传统分页查询技术的不足,融合了多种技术,包括数据库优化策略、SQL 语句优化、...
从Oracle 10g开始,RBO(基于规则的优化器)已被淘汰,现在主要使用CBO(基于成本的优化器),它会根据表的物理大小、索引状态等信息来估算成本,选择最低成本的执行计划。 索引是提升查询性能的关键手段。B-tree...
Oracle 多表查询优化需要考虑多个方面,包括选择合适的表名顺序、使用 Cache Buffer、语句共享、优化查询路径、避免多表连接查询、优化数据统计、选择合适的索引、优化数据库结构、使用 Materialized View、优化...
《Oracle 10g性能优化》一书深入探讨了如何在Oracle 10g数据库环境中实现性能优化,针对企业级应用中...通过综合运用上述策略和技术,可以有效提升Oracle 10g数据库的整体性能,满足高并发、大数据量的企业级应用需求。
Oracle数据库以其高效、稳定和强大的功能著称,但在处理大规模数据时,如果不进行适当的优化,查询性能可能会显著下降。本篇文章将深入探讨Oracle数据库中的大型表查询优化策略,并结合工具的使用来提高查询效率。 ...
### ORACLE10G 性能优化 #### 一、Oracle体系结构 Oracle10g数据库的性能优化首先需要理解其基本的体系结构。Oracle体系结构主要包括实例和数据库两大部分。 - **Oracle实例**:是访问数据库的一种方式,每个实例...
在 Oracle 中,多表查询是指从多个表中检索数据的操作。这种操作可能会占用大量的系统资源和时间,影响数据库的性能。 Oracle 多表连接效率 在 Oracle 中,多表连接的效率取决于连接的方式和顺序。 Oracle 使用的...
《ORACLE数据库设计与优化》 Oracle数据库是全球广泛使用的大型关系型数据库系统之一,它在数据存储、处理和管理方面具有强大的功能。本主题主要探讨Oracle数据库的设计原则和优化策略,以提升系统的性能和效率。 ...
Oracle数据库性能优化是确保系统高效运行的关键环节,尤其是在大数据量和高并发的环境中。Oracle数据库因其先进、完整和集成的特性,在市场中占据主导地位,因此深入理解和掌握Oracle的优化技术至关重要。 首先,...
8. **分区(Partitioning)**:Oracle10g支持多种分区策略,如范围、列表、哈希和复合分区,便于管理和优化大规模数据表。 9. **物化视图(Materialized Views)**:物化视图可以预先计算并存储复杂查询的结果,...
ORACLE 采用一次读入多个数据块(database block)的方式优化全表扫描。 2. 通过 ROWID 访问表 你可以采用基于 ROWID 的访问方式,提高访问表的效率。ROWID 包含了表中记录的物理位置信息。ORACLE 采用索引(INDEX...
Oracle SQL 优化 Oracle SQL 优化是数据库性能优化的关键部分。为了提高数据库的性能,我们需要从五个方面进行调整:去掉不必要的大型表的全表扫描、缓存小型表的全表扫描、检验优化索引的使用、检验优化的连接技术...
性能优化是确保数据仓库能够应对大量并发请求和处理大规模数据集的关键。 ##### 1.6 数据仓库的安全性 数据安全对于任何数据仓库来说都是至关重要的。这部分内容涵盖了数据仓库中的安全机制,如用户认证、访问控制...
综上所述,Oracle数据仓库凭借其丰富的功能特性和高度优化的架构设计,在处理海量数据方面表现出色,为企业决策支持提供了坚实的基础。无论是数据仓库系统的建设、维护还是优化,Oracle都提供了全面且高效的解决方案...
### ORACLE 数据库的统计数据及优化 #### 一、引言 在当今信息化时代,数据库管理系统(DBMS)作为数据管理的核心工具,其性能优化尤为重要。Oracle数据库作为一种广泛使用的DBMS,其性能优劣直接影响到企业的业务...