出现以下情形之一时,即使修改优化器模式使用rbo,oracle也不会使用rbo
1、目标sql中有iot(index organized table)
2、目标sql中有分区表
3、使用了并行查询或并行dml
4、使用了星型链接
5、使用了hash连接
6、使用了索引快速全扫描
7、使用了函数索引
......
在sql中使用hint,就默认启用了cbo,下两个hint例外
1、RULE,表示启用rbo
2、DRIVING_SITE,用于带dblink的sql,使sql在对应端执行
rbo下如何调整sql执行计划
1、等价改写,在where条件中对number和date列上加0,对char和varchar列加上空字符串||‘’,这样可以使原本可以走的索引现在走不了
2、改变sql涉及对象在sql文本中的位置
3、调整相关对象在数据字典缓存中的顺序,当多条执行路径等级值相同时可调整