对oracle中SQL优化的理解

Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间。要达到上述目的,我们通常只有如下三种方法可以选择:
1、降低目标SQL语句的资源消耗。
2、并行执行目标SQL语句。
3、平衡系统的资源消耗。
方法1:a、在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗。
b、不改写SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗。
注意:走索引不一定比全表扫描好,例如在很多情况下走索引的嵌套循环连接的执行效率往往比不上走全表扫描的哈希连接的执行效率。
方法2:实际上是以额外的资源消耗来换取执行时间的缩短,很多情况下使用并行是针对某些SQL的唯一优化手段。
方法3:可以避免不必要的资源争用所导致的目标SQL语句执行时间的增长。由于在目标SQL执行时系统处于高负荷状态,执行目标SQL所需的
硬件资源(CPU、内存、I/O等)得不到保障,存在争用的情况。在这种情况下,我们可以把一些与目标SQL同时执行的不重要但很消耗系统资源
的操作(如报表、批处理等)挪到系统不忙的时候执行。

Oracle数据库里做SQL优化的具体步骤:
1、找到执行时间最长、消耗系统资源最多的Top SQL语句。
2、查看上述Top SQL语句的执行计划,并结合器资源消耗情况和相关统计信息、trace文件来分析其执行计划是否合理。
3、通过修正措施(如:调整上述Top SQL的执行计划等)来对上述Top SQL做调整以缩短它们的执行时间,这里调整的指导原则就是前面介绍的
三种方法。

针对Top SQL的常用调整手段:
1、如果是统计信息不准或是因为CBO计算某些SQL的成本所用公式的先天不足而导致的SQL性能问题,我们可以通过重新收集统计信息,或者手工
修改统计信息,或者使用Hint来加以解决。
注释:对表收集统计信息的方式 exec dbms_stats.gather_table_stats(ownname=>‘数据库用户名‘,tabname=>‘表名‘,method_opt=>‘for all
columns size 1‘,CASCADE=>true,estimate_percent=100);
2、如果是SQL语句的写法问题,我们可以通过在不更改业务逻辑的情况下改写SQL来解决问题。
3、如果是不必要的全表扫描/排序而导致的目标SQL的性能问题,我们可以通过建立合适的索引(包括函数索引、位图索引等)来加以解决。
4、如果是因为各种原因导致目标SQL的执行计划不稳定,我们可以通过使用Hint、SQL Profile或者SPM来解决问题。
5、如果是表或者索引的不良设计导致的目标SQL的性能问题,我们可以通过重新设计表/索引,重新组织表里的数据来解决问题。
6、如果上述调整措施都失效,我们可以考虑用并行来缩短目标SQL的执行时间。
7、如果上述调整措施(包括并行)都失效,我们还可以再联系实际业务的基础上更改目标SQL的执行逻辑,甚至不执行目标SQL,这是最彻底的
优化了。

原文地址:https://www.cnblogs.com/qinjf/p/8419658.html

时间: 2024-11-09 00:30:14

对oracle中SQL优化的理解的相关文章

oracle中sql优化读书笔记1-优化器

我们写一条sql语句给Oracle,Oracle是需要将他解析之后才去执行的,也就是要明确先干啥后干啥.这就是所谓的执行计划. 优化器就是用来得出最后的执行计划的工具,Oracle的优化器有两种一种是基于规则的,一种是基于成本的. 1.基于规则的,就是明确了步骤,比如说必须是先把where 条件中最后一个条件用于过滤,再在此基础上用倒数第二个条件过滤. 2.基于成本的,就是先收集一下当前的数据量有多大,各种条件的数据量有多大(这就得有Oracle的统计的东西做支持了),通过判断找出来过滤出最少的

基于oracle的sql优化方法论

Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择: 1.降低目标SQL语句的资源消耗: 2.并行执行目标SQL语句: 3.平衡系统的资源消耗. "方法1:降低目标SQL语句的资源消耗"以缩短执行时间,这是最常用的SQL优化方法.这种方法的核心是要么通过在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗,要么不改SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗. 方法2:并行执行

转://从一条巨慢SQL看基于Oracle的SQL优化

http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从执行计划中找到SQL执行慢的Root Cause.统计信息与cardinality问题.探索性能杀手Filter操作.如何进行逻辑重写让SQL起飞等多个维度进行解析,最终优化巨慢SQL语句,希望能够抛砖引玉,和大家一起探讨SQL优化方法. 另外,还简单介绍了两种解决疑难SQL优化问题的工具:1005

ORACLE 中 SQL语句优化

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.    (2) WHERE子句中的连接顺序.:  ORACLE采用自下而上的顺序解

ORACLE常用SQL优化hint语句

在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=’SCOTT’; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.

Oracle数据库SQL优化

SQL优化的最终目的是用户体验-在最短时间内让用户在页面数据.因此,执行时间是SQL优化的重要指标.在SQL查询中,I/O操作最占系统性能的.I/O操作量越大,时间越久.减少I/O操作量是优化SQL的目标.同时,CPU,缓存命中率也很重要. 并不是所有SQL都需要被优化,使用频率高,性能差的SQL语句需要重点被优化.可以通过查看v$sqlarea表,访问OEM来查找. 注意不同版本的Oracle使用不同的优化器.11g的优化器基于代价(Cost Based Optimizer)(考虑SQL执行耗

Oracle 的sql优化提高性能

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用

跟踪oracle中sql语句执行过程及相关知识拓展

<pre name="code" class="sql">select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这个方法查询结果每条记录显示一条查询语句,且只能查询sql_text小于1000字符的,多余的会被截断. 改进一下: select * from v$sqlarea where first_load_tim

oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)

1.   简单介绍 Oracle Database11gR1引进了SQL PlanManagement(简称SPM),一套同意DBA捕获和保持随意SQL语句运行计划最优的新工具,这样,限制了刷新优化器统计数据.已有应用改变.甚至数据库版本号升级带来的影响.本文帮助对SPM原理基本了解,并对其性能优化能力进行简要的说明. 2.   SPM原理和机制 Oracle 11g通过一个简单而优雅的方法实施了解决SQL计划意外恶化的一套称为SQL Plan Management(SPM)的新特点.仅仅要用户