`

oracle

    博客分类:
  • sql
阅读更多

今天没事来说说oracle性能优化的技巧。。

1.选用适合的ORACLE优化器
    ORACLE的优化器共有3种:

    1.RULE(基于规则) 2.COST(基于成本) 3.CHOOSE(选择性)

    设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖。

    为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。

    如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关。 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器。

    在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。

    2.访问Table的方式

    ORACLE 采用两种访问表中记录的方式:

    1.全表扫描

    全表扫描就是顺序地访问表中每条记录。 ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。

    2.通过ROWID访问表

    你可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息……ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。

    3.共享SQL语句

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。 因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的执行路径。 ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用。

    可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询。

    数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。

    当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句。

    这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。

    共享的语句必须满足三个条件:

    A.字符级的比较:

    当前被执行的语句和共享池中的语句必须完全相同。 例如:

    SELECT * FROM EMP;

    和下列每一个都不同

    SELECT * from EMP;

    Select * From Emp;

    SELECT * FROM EMP;

    B.两个语句所指的对象必须完全相同,例如:

用户 对象名 如何访问
Jack sal_limit private synonym
  Work_city public synonym
  Plant_detail public synonym
Jill sal_limit private synonym
  Work_city public synonym
  Plant_detail table owner


    考虑一下下列SQL语句能否在这两个用户之间共享。

 SQL 能否共享 原因
select max(sal_cap) from sal_limit; 不能 每个用户都有一个private synonym - sal_limit , 它们是不同的对象
select count(*0 from work_city where sdesc like 'NEW%'; 能 两个用户访问相同的对象public synonym - work_city
select a.sdesc,b.location from work_city a , plant_detail b where a.city_id = b.city_id 不能 用户jack 通过private synonym访问plant_detail 而jill 是表的所有者,对象不同


    C.两个SQL语句中必须使用相同的名字的绑定变量(bind variables) ,例如:

    第一组的两个SQL语句是相同的(可以共享),而第二组中的两个语句是不同的(即使在运行时,赋于不同的绑定变量相同的值)

    a.

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

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

    b.

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

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

分享到:
评论

相关推荐

    Oracle 9i Client (Oracle 9i 客户端) 简化版 (不安装Oracle客户端,也可以使用PLSQL Developer)

    Oracle 9i Client (Oracle 9i 客户端) 简化版 (不安装Oracle客户端,也可以使用PLSQL Developer 不用安装Oracle客户端也可以使用PLSQL Developer 绿色! 安全! 轻便! 可靠! 1、本软件可作为简单的Oracle9i客户端...

    Mysql转Oracle软件 DBMover for Mysql to Oracle

    Dbmover for Mysql to Oracle 是高效的将Mysql导入到Oracle数据库的工具。 使用DBMover可以灵活定义Mysql和Oracle之间表和字段的对照关系,也可以在DBMover创建一个查询,把查询结果当作源表转入到Oracle中。 ...

    《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf

    《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle...

    利用python-oracledb库连接Oracledb数据库,使用示例

    python-oracledb的源码和使用示例代码, python-oracledb 1.0,适用于Python versions 3.6 through 3.10. Oracle Database; This directory contains samples for python-oracledb. 1. The schemas and SQL ...

    Oracle Instant Client 11.2.0.1.0 轻量级Oracle客户端

    Oracle Instant Client 11.2.0.1.0是轻量级Oracle客户端,用于连接访问Oracle 9i、10g、11g 11.2.0.1.0版本的Oracle数据库。 Oracle Instant Client11.2.0.1.0 安装程序包含OCI/ OCCI、JDBC-OCI SDK(软件开发工具...

    TiDB&MySql&Oracle介绍及区别

    5. MySQL与ORACLE区别 19 6. 可视化工具 38 三、 ORACLE介绍 38 1. ORACLE是什么? 38 2. ORACLE核心特点是什么? 38 3. ORACLE数据库类型有哪些? 39 4. ORACLE整体架构及工作原理? 39 5. 可视化工具 40

    oracle 9i 全部下载链接

    oracle 9i所有版本最新下载链接 直接迅雷下载 Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP ...

    oracle 使用命令创建oracle数据库

    ORACLE_HOME=$ORACLE_BASE/oracle ORACLE_SID=hsj PATH=$ORACLE_HOEM/bin:$PATH; LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH  3...

    ODP.NET 方式链接oracle数据库的Oracle.ManagedDataAccess.dll文件取代Oracle.DataAccess.dll

    使用了,ODP.NET 方式链接数据库,只要把Oracle.ManagedDataAccess.dll引入取代以前的Oracle.DataAccess.dll即可。 这种方式也是oracle公司提供的,稳定性要比之前那种更好,而且也是免安装客户端的,目前还没测试...

    Oracle11g中文文档.zip

    oracle11g官方中文帮助 Oracle 11g:ORACLE ACTIVE DATA GUARD.pdf Oracle Database 11g 高可用性.pdf Oracle 数据库 11g 中的分区.pdf Oracle 数据库 11g :真正应用测试与可管理性概述.pdf Oracle 数据库 11g...

    oracle11g官方中文文档完整版

    Oracle 11g 官方中文文档 包括一下部分文档: Oracle 11g:ORACLE ACTIVE DATA GUARD.pdf Oracle Database 11g 高可用性.pdf Oracle 数据库 11g :真正应用测试与可管理性概述.pdf Oracle 数据库 11g 中的分区....

    Oracle.ManagedDataAccess 最新版(4.122.21.1)

    oracle.ManagedDataAccess.dll(oracle.ManagedDataAccess.Client)全托管驱动。 此驱动对32位和64位oracle数据库具有很好的连接兼容性。 可采用无客户端远程连接oracle,或在本机使用连接。 使用此驱动可以完全替换...

    Oracle Data Provider for .NET (ODP.NET)

    Oracle 10g 第 2 版 ODAC 和 Oracle Developer Tools for Visual Studio .NET 下载文件 ODTwithODAC1020221.exe 235 MB(247,296,458 字节) ODAC 安装说明 Oracle Developer Tools For Visual ...

    Oracle 19C+13.4EMCC-oem部署和配置(含脚本)

    Oracle 19C+13.4EMCC部署和配置 1 一、安装oracle19C数据库 1 1、 安装oracle19C软件 1 2、 创建PDB 1 3、 设置随机启动 1 4、 修改logfile大小 2 二、利用EM模板创建pdb 3 1. 上传dbca模板并设置解压 3 2. DBCA建库...

    C# winform连接Oracle数据库(直接引用Oracle.ManagedDataAccess.dll使用)

    项目中有个功能需要从一台Oracle数据库获取数据,本以为是很简单的事情,直接将原来的SqlClient换成OracleClient调用,结果远没自己想的简单。有很多需要安装Oracle客户端,网上这方面搜索后,太多的文章,还要不停...

    MySql转换成Oracle工具

    Convert Mysql to Oracle 最新版本:4.0 Convert Mysql to Oracle是一个免费的数据库转换工具,实现快速安全地将Mysql数据库导入为ORACLE数据库。 Convert Mysql to Oracle 功能特点 可以转换所有的Mysql字段类型 ...

    sql expert for oracle 3.2 破解版

    解决的办法其实很简单,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE这个位置新建一个字符串值ORACLE_HOME,把oracle的HOME值写进去就可以了!在10g以上的版本中一般ORACLE_HOME都存在HKEY_LOCAL_MACHINE\SOFTWARE\...

    Oracle Instant Client 11g 绿色版(32位)

    自己制作的这个小巧的客户端(文件全部源自Oracle官方网站),原理其实很简单,就是向注册表写几个键值,非常绿色和环保。  下载后,只需要将Oracle压缩文件解压,建议放在D:\Oracle目录下,运行OracleSetup32.exe...

    Oracle 11g 安装包 Windows Linux 系统 32位 64位安装包 客户端 服务器端 都有 百度网盘资源

    Oracle 11g 安装包 Windows Linux 系统 32位 64位安装包。资源由本人辛苦整理而来,因在Oracle官网很难找到下载链接,所以特地拿出来分享,如需其他版本请私信,必回复。 资源包含以下版本: Oracle Database 11.2....

    oracle-instantclient11.2 rpm包

    oracle 11.2.0.4.0-1.x86_64 rpm客户端安装包 文件列表: oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-...

Global site tag (gtag.js) - Google Analytics