Oracle sql 性能如何进行调整

以下的文章主要是介绍Oracle语句优化规则汇总之Oracle sql 性能的相关优化调整 ,其中包括如何选用适合的Oracle优化器,以及共享SQL语句等相关内容的描述,以下就是文章的主要内容的介绍。

1. 选用适合的Oracle优化器

Oracle的优化器共有3种:

a. RULE (基于规则)

b. COST (基于成本)

c. CHOOSE (选择性)

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

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

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

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

2. 访问Table的方式Oracle 采用两种访问表中记录的方式

a. 全表扫描

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

b. 通过ROWID访问表

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

3. 共享SQL语句

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

Oracle的这个功能大大地提高了SQL的执行性能并节省了内存的使用。

可惜的是Oracle只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询。数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。当你向Oracle 提交一个SQL语句,Oracle会首先在这块内存中查找相同的语句。

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

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

A. 字符级的比较:

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

例如:

 

  1. SELECT * FROM EMP; 

和下列每一个都不同

 

  1. SELECT * from EMP;  
  2. Select * From Emp;  
  3. SELECT * FROM EMP;  

 

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

例如:

用户 对象名 如何访问

  1. Jack sal_limit private synonym   
  2. Work_city public synonym   
  3. Plant_detail public synonym   
  4. Jill sal_limit private synonym   
  5. Work_city public synonym   
  6. Plant_detail table owner 

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

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

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

a.

 

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

b.

 

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

4. 选择最有效率的表名顺序(只在基于规则的优化器中有效)

Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。

当Oracle处理多个表时, 会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。

例如:

表 TAB1 16,384 条记录

表 TAB2 1 条记录

选择TAB2作为基础表 (最好的方法)

select count(*) from tab1,tab2 执行时间0.96秒

选择TAB2作为基础表 (不佳的方法)

select count(*) from tab2,tab1 执行时间26.09秒

如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。

例如: EMP表描述了LOCATION表和CATEGORY表的交集。

  1. SELECT *   
  2. FROM LOCATION L ,   
  3. CATEGORY C,  
  4. EMP E   
  5. WHERE E.EMP_NO BETWEEN 1000 AND 2000  
  6. AND E.CAT_NO = C.CAT_NO  
  7. AND E.LOCN = L.LOCN 

将比下列Oracle SQL更有效率

 

  1. SELECT *   
  2. FROM EMP E ,  
  3. LOCATION L ,   
  4. CATEGORY C  
  5. WHERE E.CAT_NO = C.CAT_NO  
  6. AND E.LOCN = L.LOCN  
  7. AND E.EMP_NO BETWEEN 1000 AND 2000  

上述的相关内容就是对Oracle sql 性能优化调整的描述,希望会给你带来一些帮助在此方面。

文章出自:http://www.programbbs.com/doc/class10-2.htm

【编辑推荐】

  1. 如何配置Oracle数据库
  2. 怎样恢复Oracle重做日志丢失的窍门
  3. Oracle 11g五大独特特能的描述
  4. 发挥Oracle数据库数据管理功能的方法
  5. 探讨怎样回收Oracle监听器日志文件

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/225732.html<

(0)
管理的头像管理
上一篇2025-04-17 01:10
下一篇 2025-04-17 01:12

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注