没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
性能調整
目 录
选用适合的 优化器
访问 的方式
共享 语句
选择最有效率的表名顺序只在基于规则的优化器中有效
子句中的连接顺序.
子句中避免使用 ‘
减少访问数据库的次数
使用 函数来减少处理时间
!整合简单"无关联的数据库访问 !
#删除重复记录 !
用 $% 替代 #
尽量多使用 &&' #
计算记录条数 #
用 ( 子句替换 )'%* 子句
减少对表的查询
通过内部函数提高 效率
使用表的别名+,
用 -' 替代 '%
!用 %-' 替代 %'%
#用表连接替换 -'
用 -' 替换 ''%
识别’低效执行’的 语句
使用 ./0工具来查询 性能状态
用 -/'%/%分析 语句
用索引提高效率 !
索引的操作 #
基础表的选择
多个平等的索引
!1等式比较和范围比较
#不明确的索引等级
强制索引失效
避免在索引列上使用计算.
自动选择索引
避免在索引列上使用 %
用23替代2
用 $%'% 替换 适用于索引列
用 '% 来替换
性能調整
避免在索引列上使用 '%$ 和 '%%$
!总是使用索引的第一个列
# 内部操作
用 $%'%4替换 $%'%如果有可能的话
使用提示+56,
用 替代 78
避免改变索引列的类型
需要当心的 子句
连接多个扫描 #
7 下使用更具选择性的索引 #
避免使用耗费资源的操作
!优化 *$/78
#使用日期
使用显式的游标$,
11优化 -/ 和 '&/
11分离表和索引
选用适合的 优化器
的优化器共有 种
基于规则基于成本选择性
设置缺省的优化器可以通过对 文件中 参数的各种声明如
!"!你当然也在 # 句级或是会话$%$$级对其进行覆
盖
为了使用基于成本的优化器&$'&$%()*+%你必须经常运行 ,-+%命令以增加数据库
中的对象统计信息.%$$$的准确性
如果数据库的优化器模式设置为选择性那么实际的优化器模式将和是否运行过 ,-+% 命令有
关如果 ,% 已经被 ,-+% 过优化器模式将自动成为 &反之数据库将采用 形式的优化器
在缺省情况下 采用 优化器为了避免那些不必要的全表扫描/0,,,%$你必须
尽量避免使用 优化器而直接采用基于规则或者基于成本的优化器
性能調整
2.访问 Table 的方式
采用两种访问表中记录的方式
全表扫描
全表扫描就是顺序地访问表中每条记录 采用一次读入多个数据块($%,1的方式
优化全表扫描
通过 ! 访问表
你可以采用基于 ! 的访问方式情况提高访问表的效率! 包含了表中记录的物理位置信
息 采用索引2 3实现了数据和存放数据的物理位置! 之间的联系通常索引提供了
快速访问 ! 的方法因此那些基于索引列的查询就可以得到性能上的提高
3.共享 SQL 语句
为了不重复解析相同的 # 语句在第一次解析之后 将 # 语句存放在内存中这块位于系统
全局区域 4$-$%*5,,%的共享池$6%(07%),中的内存可以被所有的数据库用户共享
因此当你执行一个 # 语句有时被称为一个游标时如果它和之前的执行过的语句完全相同 就能
很快获得已经被解析的语句以及最好的执行路径 的这个功能大大地提高了 # 的执行性能并节省
了内存的使用
可惜的是 只对简单的表提供高速缓冲6%07%5这个功能并不适用于多表连接查询
数据库管理员必须在 中为这个区域设置合适的参数当这个内存区域越大就可以保留更多的语句
当然被共享的可能性也就越大了
当你向 提交一个 # 语句 会首先在这块内存中查找相同的语句这里需要注明的
是 对两者采取的是一种严格匹配要达成共享# 语句必须完全相同包括空格换行等
共享的语句必须满足三个条件
字符级的比较
当前被执行的语句和共享池中的语句必须完全相同 .
例如
8"9
性能調整
和下列每一个都不同
8/*9
%,%8"**)9
8"9
&两个语句所指的对象必须完全相同 :
例如
用户 对象名 如何访问
:1 $,,* );%$--*
!1- )0,$--*
,(%, )0,$--*
:,, $,,* );%$--*
!1- )0,$--*
,(%, ,%<%
考虑一下下列 # 语句能否在这两个用户之间共享
SQL
能否共享 原因
$%,%*=$,)/*$,,*9
不能
每个用户都有一个 );%
$--*'$,,*它们是不
同的对象
$%,%08/*<1-<6%%$(%$
,1%>2!?>9
能
两个用户访问相同的对象 )0,
$--*'<1-
$%,%$(%$,/*<1-
),(%,<6%%-(@-(
不能
用户 .1通过 );%$--*
访问 ),(%,而 .,,是表的所
有者对象不同
AAAAA两个
SQL
语句中必须使用相同的名字的绑定变量 (bind variables)
例如:
第一组的两个 # 语句是相同的可以共享而第二组中的两个语句是不同的即使在运行时赋于不
同的绑定变量相同的值
$%,%)*%/*)%),%<6%%)@,1)9
性能調整
$%,%)*%/*)%),%<6%%)@,1)9
$%,%)*%/*)%),%<6%%)@:blk1.ot_ind9
$%,%)*%/*)%),%<6%%)@:blk1.ov_ind9
4.选择最有效率的表名顺序(只在基于规则的优化器中有效)
ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名因此 " 子句中写在最后的表基
础表 (;5,%将被最先处理在 " 子句中包含多个表的情况下你必须选择记录条数最少的表作为
基础表当 处理多个表时会运用排序及合并的方式连接它们首先扫描第一个表" 子句中最后
的那个表并对记录进行派序然后扫描第二个表" 子句中最后第二个表最后将所有从第二个表中检索出
的记录与第一个表中合适记录进行合并
例如
表 &BCD条记录
表 &E条记录
选择 &E 作为基础表 最好的方法
$%,%08/*E执行时间 FGB 秒
选择 &E 作为基础表 不佳的方法
$%,%08/*E执行时间 EBFG 秒
如果有 个以上的表连接查询那就需要选择交叉表%$%,%作为基础表交叉表是指那个被其他
表所引用的表
例如
表描述了 2 表和 4H 表的交集
8
"2
4H
EMP E
!2&!2FFF2 EFFF
2 2@2
剩余42页未读,继续阅读
Arvin_Rong
- 粉丝: 175
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0