`
Acmey
  • 浏览: 52518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle优化器以及SQL共享

    博客分类:
  • DB
 
阅读更多

  1、oracle的优化器

  ============================

  oracle有三种优化器

  RULE

  COST

  CHOOSE

  通过参数OPTIMIZER_MODE来设置优化器的类型,缺省情况下为选择性优化器,既是CHOOSE

  SQL> show parameter OPTIMIZER_MODE

  NAME                                 TYPE        VALUE

  ------------------------------------ ----------- ------------

  optimizer_mode                       string      ALL_ROWS

  在该参数的值中可能出现的有

  ALL_ROWS

  FIRST_ROWS

  RULE

  COST

  CHOOSE

  ALL_ROWS:是一种基于成本的优化器,它将选择一种在最短时间内返回所有数据的执行计划

  FIRST_ROWS:和ALL_ROWS不同,他将选择一种最快返回结果集第一条记录的执行计划,不论这个执行计划是基于成本的还是基于规则的

  <注意>:

  在使用CBO时,必须经常使用analyze来对数据库对象进行统计分析以增加数据库中的对象信息的准确性

  如果使用的是CHOOSE,选择性的优化器的话,那么实际使用的优化器将和是否使用过analyze命令有关.

  如果使用过analyze,将使用CBO模式,反之为RULE模式

  默认情况下数据库使用CHOOSE模式的优化器,但为了避免过多的全表扫描,最好尽量避免使用选择模式的优化器

  =============================

  2、访问表的方式

  全表扫描:

  采用顺序访问的方式访问每条记录,实际过程中oracle一次读入多个数据块来加快全表扫描

  实际数据库中通过参数db_file_multiblock_read_count来控制一次读取的块的数量.对该参数进行合理配置可以优化I/O

  SQL> show parameter db_file_multiblock_read_count

  NAME                                 TYPE        VALUE

  ------------------------------------ ----------- ---------------

  db_file_multiblock_read_count        integer     16

  ---------------------------------

  通过ROWID访问

  当使用索引的时候,索引通过键值来区分数据,每个键值都对应存储数据的ROWID,最终通过索引对应的ROWID找到数据,达到优化查询的效果

  ============================

  共享sql

  为了不重复解析相同的sql语句,在第一次解析后,oracle将sql语句放在library cache中,

  当再次执行相同的sql语句时,将直接引用之前的执行计划.

  library cache中存放的解析后的sql按照lru规则清空

  要实现sql语句的共享,必须满足以下三个条件

  --------------------

  1、字符级比较

  包括语句的

  字母大小写

  空格

  tab键

  的使用,必须完全一致

  例:

  SELECT * FROM EMP;

  和

  SELECT * from EMP;

  将不会得到共享

  --------------------

  2、两个语句所指的对象必须完全相同

  例:

  user1有表t1

  user2有表t1

  两个用户分别建立自己的连接进入数据库,都执行

  select * from t1;

  因为owner不同,语句将不能共享

  ---------------------

  3、两个语句中必须使用相同名字的帮定变量

  select pin , name from people where pin = :blk1.pin;

  select pin , name from people where pin = :blk1.pin;

  可以共享

  select pin , name from people where pin = :blk1.ot_ind;

  select pin , name from people where pin = :blk1.ov_ind;

  不能共享
分享到:
评论

相关推荐

    老方块ORACLE SQL性能优化(全)教学PPT

    性能管理 性能问题 调整的方法 SQL优化机制 应用的调整 SQL语句的处理过程 共享SQL区域 SQL语句处理的阶段 共享游标 SQL编码标准 Oracle 优化器介绍 SQL Tunning Tips 优化Tools

    ORACLE SQL性能优化

    ORACLE SQL性能优化 通过init.ora文件中OPTIMIZER_MODE声明 RULE (基于规则) 所遵循的是Oracle内部预定的一些规则。比如当一个where子句中的一列有索引时去走索引。 COST (基于成本) 你必须经常运行analyze ...

    oracle的sql优化

     对Oracle共享池和缓冲区中的Sql必须要大小写都完全用上才能够匹配上 2.顺序问题  Oracle按照从右到左的顺序对数据表进行解析。因此From最后面的表为基础表,一般要选择记录数最少的表作为基础表。  对于Where...

    ORACLE 优化sql语句提高oracle执行效率 .doc

    在平时的日常开发中,由于SQL语句使用不当,执行效率低下,现整理了文档供大家参考,尽可能帮忙新手,实现资源共享;

    oracle_sql性能优化

    1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,...

    ORACLE SQL性能优化系列

    1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,...

    ORACLE SQL性能优化系列(全)

    非常全面的ORACLE SQL性能优化介绍及实例:优化器的选择、共享SQL语句、访问Table的方式、减少访问数据库的次数、使用DECODE函数、减少对表的查询、通过内部函数提高SQL效率、用NOT EXISTS替代NOT IN、使用EXPLAIN ...

    Oracle优化53解

    选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,...

    Oracle优化日记:一个金牌DBA的故事 白鳝.扫描版

    《Oracle优化日记:一个金牌DBA的故事》是一本介绍Oracle数据库优化方法的书,以一个实际的大型优化项目为原型,用日记的形式记录了一个优化小组的DBA 如何从纷繁的头绪中找到突破口,进而完成了一个看似不可能完成...

    关于Oracle多表连接,提高效率,性能优化操作

    执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只要0.02秒,但是2张表联合统计就可能要几十表了. 这是因为ORACLE只对...

    Oracle SQL性能优化53点

    Oracle SQL性能优化53点: 1. 选用适合的ORACLE优化器 2. 访问Table的方式 3. 共享SQL语句 ...

    Oracle SQL 性能优化

    oracle sql 优 化 的 53 常 用 技 巧. 1. 选用适合的ORACLE优化器 2. 访问Table的方式 3. 共享SQL语句 -----

    收获不止SQL优化

    第1章 全局在胸——用工具对SQL整体优化 1 1.1 都有哪些性能工具 1 1.1.1 不同调优场景分析 2 1.1.2 不同场景对应工具 2 1.2 整体性能工具的要点 4 1.2.1 五大性能报告的获取 5 1.2.2 五大报告关注的要点 10 ...

    oracle语句优化.docx

    oracle语句优化:多表关联,exists ,in ORACLE对每个SQL都会对其进行分析,占用共享内存,服务器当前性能(共享内存、磁盘文件碎片)、数据库对象(表、索引)统计信息

    ORACLE语句优化

    53个Oracle语句优化规则详解1.选用适合的Oracle优化器2.访问Table的方式Oracle采用两种访问表中记录的方式3.共享SQL语句4.选择最有效率的表名顺序5. WHERE子句中的连接顺序。。。

    Oracle9i数据库系统优化与调整.pdf

    第12章 优化SQL语句 第13章 数据访问方法 第14章 优化器(Optimizer)简介 第15章 使用优化器提示 第四部分 ORACLE系统调整 第16章 调整信息的来源 第17章 STATSPACK工具 第18章 动态性能视图与性能诊断 第19...

    Oracle语句优化规则汇总

    ORACLE优化器、共享SQL语句、选择最有效率的表名顺序、使用DECODE函数来减少处理时间等等53种方法!

Global site tag (gtag.js) - Google Analytics