a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 91|回复: 0

[其他] Oracle认证:三种在Oracle里提高SQL执行效率的方法

[复制链接]
发表于 2012-8-4 13:41:06 | 显示全部楼层 |阅读模式
 要提高SQL在Oracle里的执行效率,优化应用的营业逻辑是最首要的,年夜手艺层面来讲Oracle也供给了一些体例,今天主要讲3种:   Oracle供给了多种体例用于削减花在分解Oracle SQL表达式上的时刻,在执行带有年夜量执行打算的复杂发芽时分解过程会拖累系统的机能。此刻我们来简要地看看这些体例中的几种。% ~" L: s* P6 R  s5 D8 s0 n, K7 M7 n
1、使用ordered提醒 : ~6 l/ t+ X7 O% M* {
  Oracle必需破耗年夜量的时刻来分解多表格的合并,用以确定表格合并的最佳挨次。如不美观SQL表达式涉及七个甚至更多的表格合并,那媚暌剐时就会需要跨越30分钟的时刻来分解,因为Oracle必需评估表格合并所有可能的挨次。八缸莨狁就会有40,000多种挨次。Ordered这个提醒 (hint)和其他的提醒一路使用能够发生合适的合并挨次。
6 s8 n7 I5 `& g! B+ I& C0 H, T# t" G  Ordered这个提醒会要求列在SQL表达式FROM字句里的表格按照指定的挨次进行合并,FROM字句里的第一缸莨狁会指定驱动表格 (driving table)。驱动表格应该是返回最小行数的表格。使用ordered提醒会跳过很是耗时和耗资本的分解操作,并加速Oracle SQL的执行。* e. `0 A" l8 n
  Listing A如下:! |( e/ _$ O/ m7 p2 T" N8 N6 P
  以下是引用片段:& ?8 o8 \) c! z, u3 w$ W0 v1 }) t  }
  Listing A+ u  i1 ]! M: d* b( C
  select /*+ ordered use_nl(bonus)
/ i- g4 c5 S3 c% M2 M  B+ c0 y7 Z1 Y  parallel(e, 4) */ e.ename, hiredate, b.comm from emp e, bonus b( ?6 N# b& |3 E8 j0 Z1 r
  where e.ename = b.ename ;
& e/ ?) l/ S0 x% R. @0 h( m- o  Listing A里是一个复杂发芽的例子,这个发芽被强制进行一个嵌套轮回,年夜而与对emp表格进行的并行发芽合并。要注重,我已经使用ordered提醒来指导Oracle去按照WHERE子句所列出的挨次来评估表格。
$ v- n: ], o8 H! d( }2、使用theordered_predicates
$ l& s' y- R" d  ordered_predicates提醒在发芽的WHERE子句里指定的,并被用来指定布尔判定(Boolean predicate)被评估的挨次。在没有ordered_predicates的情形下,Oracle会使用下面这些轨范来评估SQL判定的挨次:. j* r1 w; W: Y8 {& E
  子发芽的评估先于外层WHERE子句里的Boolean前提。% ?# h' k, J  P( m5 R7 ~
  所有没有内置函数或者子发芽的布尔前提都按照其在WHERE子句里相反的挨次进行评估,即最后一条判定最先被评估。6 X, K; U& u- q
  每个判定都带有内置函数的布尔判定都依据其估量的评估值按递增枚举。- G2 |# o1 @8 Q! Q1 o+ o8 Y
  你可以使用ordered_predicates提醒来强制庖代这些缺省的评估轨则,那么你WHERE子句里的项目就会按照其在发芽里呈现的挨次被评估。在发芽的WHERE子句里使用了PL/SQL函数的情形下,凡是会使用ordered_predicates提醒。如不美观你知道限制最多的判定而且但愿Oracle最先评估这些判定的时辰,在这种情形下,它也长短常有用的。用法提醒:你不能使用ordered_predicates提醒来保留对索引键进行判定评估的挨次。# W' [  z1 x! p
3、限制表格合并评估的数目
! P" ^4 R: P# q  提高SQL分解机能的最后一种体例是强制庖代Oracle的一个参数,这个参数节制着在评估一个发芽的时辰,基于耗损的优化器所评估的可能合并数目。; W  \; S4 m) X/ t
  optimizer_search_limit这个参数会指定表格合并组合的最年夜数目,后者将会在Oracle试图确定合并多表格最佳体例的时辰被评估。这个参数有助于防止优化器花更多的时刻来评估可能的合并挨次,而不是把时刻花在寻找最佳合并挨次上。 optimizer_search_limit还节制着用于挪用star join提醒的阙值,当发芽里的表格数目低于optimizer_search_limit(其缺省的值是5)的时辰,star提醒就会被帮衬。
2 J' C4 C  W! ?2 W# [$ b3 L4 Y  以上只是一些Oracle DBA用滥暌古化Oracle数据库应用轨范SQL发芽的机能的一些小技巧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-5 03:49 , Processed in 0.195742 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表