ORACLE优化

不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列的情况下,只要这些列中有一列含有null,该列就

会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能

任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的

如果每列确实可能存在空值的情况,可以使用默认值的方式替代以便充分利用索引提高性能


FROM表顺序选择使用基于规则的优化器(CBO)时,Oracle解析器按照从右到左的顺序处理FROM子句的表明,即FROM子句中最后的表(驱动表)

会最先被处理。

  当FROM子句包含多个表时,建议将记录最少的表(一般是字典表)放在最后面。当Oracle处理多个表时,一般采用排序或合并的方

式连接这些表,系统首先会扫描FROM子句部分的最后一个表,并对该表的数据行进行排序;然后扫描倒数第二个表,并将从该表中

取出的记录与第一个表中的记录进行匹配合并,依此类推。
如果是大于两表相关联,最好选择交叉表为驱动表,交叉表是指被其它表所引用的表。


驱动表的选择
驱动表(Driving Table)是指被最先访问的表,通常是以全表扫描的方式访问的。

    如果优化器是CBO,则优化器会检查SQL语句中每个表的物理大小、索引状态,然后寻找开销最小的执行路径。如果优化器是

RBO,且所有连接条件都有索引对应,则驱动表是FROM子句中最后一个表。

无论如何,我们建议始终将记录小的表(如字典表)作为驱动表,则能适应CBO和RBO!


WHERE子句如何写
Oralce优化器的原理是采用自下而上的顺序解析WHERE子句,因此表之间的连接必须写在其他WHERE条件之前, 可过滤掉最大数量记录的条件必须写

在WHERE子句的末尾 。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值