Oracle9i 优化器介绍 By Davis E-Mail:todav is@gmail
com Blog:dav is
blogchina
com 选择合适的优化器目标 默认情况下,CBO 以最佳吞吐量为目标,这意味着 Oracle 使用尽可能少的资源去处理 被语句访问到的所有行;当然 CBO 也可以用最快的响应速度来优化 SQL,这意味着 Oracle 用尽可能少的资源去处理被语句访问到的第一行或前面少数行,当然这种情况对于整个语句 来说可能消耗更多的资源
优化器产生的执行计划会因―优化器目标‖的不同而不同
如果以最佳吞吐量为目标, 结果更倾向于使用全表扫描而不是索引扫描,或者使用排序合并连接而不是嵌套循环连接; 如果以最快的响应速度为目标,其结果则通常倾向于使用索引扫描和嵌套循环连接
例如,假使你有一个语句既能运行于嵌套循环连接又能运行于排序合并连接,排序合并 连接能够较快的返回全部查询结果,而嵌套循环能快速的返回第一行或前面少数行结果
如 果你是以提高吞吐量为优化器目标,优化器就会倾向于选择排序合并连接;如果你的优化器 目标是提高响应速度,则优化器倾向于选择嵌套循环连接
选择优化器目标要以你的应用为基础,一般规则是: 1、 对于批处理应用,以最佳吞吐量为优化目标为好
例如 Oracle 报表应用程序
2、 对于交互式应用,以最快响应速度为优化目标为好
例如 SQLPLUS 的查询
影响优化器优化目标的因素主要有: 1、 OPTIMIZER_MODE 初始化参数
2、 数据字典中的 CBO 统计数据
3、 用来改变 CBO 优化目标的 Hints
OPTIMIZER_MODE 初始化参数 这个初始化参数用来规定实例的默认优化方法
其值列表及说明如下: Value CHOOSE ALL_ROWS Description 此为缺省值
优化器既可以使用基于