你知道你的Oracle用的什么优化器吗--小谈Oralce的优化器设置

本文详细介绍了Oracle数据库中两种优化器模式:CBO(基于成本)和RBO(基于规则)。包括如何查看当前优化器模式、可配置的所有模式选项及其含义,并提供了修改优化器模式的具体方法。

 

Oracle的优化器提供CBO和RBO两种方式,在9i以前的时代,8i系统都是用RBO来作为默认优化器的,
9i时,Oracle公司对Oracle整个产品进行了很大的改进,成为抢占数据库市场的武器。所有优化器
也做了很大的优化。默认情况下是用RBO作为数据库的默认优化器。

我们可以通过optimizer_mode这个系统参数来查看优化器的模式

引用:
SQL> show parameter optimizer_mode;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string ALL_ROWS


类似出现这样的记录,我这里对应的optimizer_mode的模式就是CBO的模式,而且是用最快返回所有记录的方式来优化CBO。

也不知道怎样查看所有的optimizer_mode的可选值,只好用最土的方式
SQL> alter system set optimizer_mode=ALL_ROW scope=both;
alter system set optimizer_mode=ALL_ROW scope=both
*
引用:
第 1 行出现错误:
ORA-00096: 值 ALL_ROW 对参数 optimizer_mode 无效, 它必须来自 first_rows_1000,
first_rows_100, first_rows_10, first_rows_1, first_rows, all_rows, choose, rule
之间


这里可以看到,optimizer_mode的可选值有
引用:
CHOOSE模式 默认
是一个选择模式的优化器,如果对数据库schema或者对象做个统计的话,那么会使用CBO来进行优化。如果没有的话,就是用RBO的模式

引用:
RULE模式
这个就是RBO了。更加规则来进行优化。


引用:
ALL_ROWS模式
就是我的实例中列举出来的模式,是基于cost的。而且是以用最快返回所有记录的方式来优化CBO。


引用:
FIRST_ROWS模式
也是CBO,基于cost的。和试探法相结合,查找一种可以最快返回前面少数行的方法的CBO


引用:
FIRST_ROWS_n模式
和上面的模式一样,基于cost成本的,而且是一最快的方式返回指定的前n行记录


如果需要修改的话,我们通过alter system set optimizer_mode=XXXX scope=both;的方式来进行修改

例如:
引用:
SQL>alter system set optimizer_mode=CHOOSE scope=both;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inthirties

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值