在optimizer_mode=choose情况下,查询时为什么不会使用到索引! 原因很多,说其中一个:在对表的索引列做histgram后,如果你的条件的值占了总行数的x%,CBO会使用full table scan,那个x是多少,忘了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 choose模式是让oracle自己选择优化器,如果你的查询的表作过统计信息的话,oralce会于使CBO(基于成本的优化器),CBO会跟据统计信息决定成本最低的执行路径,CBO有时会错误的认为全表扫描的成本低于缩引访问的成本,因而使用全表扫描。你可以调整optimizer_index_cost_adj参数,为索引扫描改变成本,以告知CBO倾向于使用索引扫描而不是全表扫描。optimizer_mode=rule则是强制oracle使用基于规则的优化,他更倾向于使用索引 CBO会跟据统计信息决定成本最低的执行路径 -------------------------------------- 大多数情况下是这样,但是也有例外。 因为CBO还是非常的智能. 1. 对SQL调优最好的方式就是查询计划 + Tkprof。 2. 至于究竟应该全表扫描还是使用索引,是由cost决定的。 如果CBO选择了错误的执行路径,你仍然可以使用Hints 来强制 执行某一个查询策略. 3. 举个简单的例子: 两个表结构基本一样的表,一个有索引(T1), 一个没有索引(T2), CBO访问T1表的索引列会使用Index Range Scan,而访问T2表会使用 Full Table Scan。 4. 当然,某些初始化参数例如db_file_multiblock_read_count会对 cbo使用索引或者全表扫描产生影响. 5. 一定要消除这个错误概念 "索引访问一定比全表扫描效率好", 一般 来说,如果通过索引返回的行数超过总行数的30&,这个索引就不是 很有效率了. 6. 可以参考的文档或书籍: <<Oracle Performance Tuning 101>> <<Oracle 高性能SQL指南>> 纠正: CBO还不是非常的智能 是啊,CBO还在发展中,而RBO已经发展了很久了,相对来讲比较成熟了 to 楼上: RBO属于过时的技术了,以后的版本中Oracle将会只支持CBO. 求视频教程:PL/SQL系列高级编程及大型B2C商城项目数据库实战 Oracl中的使用utl_file来读取txt文件,数据插入数据库 数据库sql问题 oracle10数据库在windowsXP下安装,如何配置数据库 求sql文:递归查询后,数据根据父节点分组统计!!! 如何将A数据库内的相关发生记录所涉及的表数据定期迁移至B数据库内 关于oracle的OEM企业管理器安装问题! 求oracle9i的示例数据库(脚本)(分不够再加) oracle workflow 是什么?(在线等!) Oracle数据库登陆报错ORA-12514 请教各位一个system用户修改的问题?谢谢! 一个怪问题
你可以调整optimizer_index_cost_adj参数,为索引扫描改变成本,以告知CBO倾向于使用索引扫描而不是全表扫描。
optimizer_mode=rule则是强制oracle使用基于规则的优化,他更倾向于使用索引
CBO会跟据统计信息决定成本最低的执行路径
--------------------------------------
大多数情况下是这样,但是也有例外。 因为CBO还是非常的智能.
1. 对SQL调优最好的方式就是查询计划 + Tkprof。
2. 至于究竟应该全表扫描还是使用索引,是由cost决定的。
如果CBO选择了错误的执行路径,你仍然可以使用Hints 来强制
执行某一个查询策略. 3. 举个简单的例子: 两个表结构基本一样的表,一个有索引(T1), 一个没有索引(T2),
CBO访问T1表的索引列会使用Index Range Scan,而访问T2表会使用
Full Table Scan。 4. 当然,某些初始化参数例如db_file_multiblock_read_count会对
cbo使用索引或者全表扫描产生影响. 5. 一定要消除这个错误概念 "索引访问一定比全表扫描效率好", 一般
来说,如果通过索引返回的行数超过总行数的30&,这个索引就不是
很有效率了. 6. 可以参考的文档或书籍: <<Oracle Performance Tuning 101>>
<<Oracle 高性能SQL指南>>
RBO属于过时的技术了,以后的版本中Oracle将会只支持CBO.