基于规则的优化器

出现以下情形之一时,即使修改优化器模式使用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、调整相关对象在数据字典缓存中的顺序,当多条执行路径等级值相同时可调整

你可能感兴趣的:(基于规则的优化器)