oracle 执行计划的一些概念

Driving Table(驱动表):
该表又称为外层表(OUTER TABLE)。这个概念用于嵌套与HASH连接中。如果该row source返回较多的行数据,则对所有的后续操作有负面影响。注意此处虽然翻译为驱动表,但实际上翻译为驱动行源(driving row source)更为确切。一般说来,是应用查询的限制条件后,返回较少行源的表作为驱动表,所以如果一个大表在WHERE条件有有限制条件(如等值限制),则该大表作为驱动表也是合适的,所以并不是只有较小的表可以作为驱动表,正确说法应该为应用查询的限制条件后,返回较少行源的表作为驱动表。在执行计划中,应该为靠上的那个row source

Probed Table(被探查表):
该表又称为内层表(INNER TABLE)。在我们从驱动表中得到具体一行的数据后,在该表中寻找符合连接条件的行。所以该表应当为大表(实际上应该为返回较大row source的表)且相应的列上应该有索引。在我们后面的描述中,一般将该表称为连接操作的row source


组合索引(concatenated index):
由多个列构成的索引,如create index idx_emp on emp(col1, col2, col3, ……),则我们称idx_emp索引为组合索引。在组合索引中有一个重要的概念:引导列(leading column),在上面的例子中,col1列为引导列。当我们进行查询时可以使用”where col1 = ? ”,也可以使用”where col1 = ? and col2 = ?”,这样的限制条件都会使用索引,但是”where col2 = ? ”查询就不会使用该索引。所以限制条件中包含先导列时,该限制条件才会使用该组合索引


Join表的几种方式:

1.(Sort Merge Join (SMJ) )
a.首先:生成驱动表的结果集。然后排序
b.生成被探查表的结果集,然后排序。
c.然后两个表进行连接。
2.(Nested Loops (NL) )
两层循环,里边的表循环一次,然后去外边的表去查,得到结果行,然后放入结果集。
所以较小的表要做为内层的表,即驱动表

他还有另一个优点:可以返回已经连接的结果集,不必等到所有的结果集都返回,才返回结构。

3.(Hash Join)

较小的表用来构建 row sourcehash 和 tablebitmap。
外边的表是用来被hash的,并与第一个表生成的hashtable 进行连接。


索引扫描的方式:
索引唯一扫描(index unique scan)
select empno,ename from emp where empno=10;
empno是主键或者是unique .
索引范围扫描(index range scan)
empno>59
索引全扫描(index full scan)
select empno, ename from big_emp order by empno,ename
是排着序的。
索引快速扫描(index fast full scan
select empno,ename from big_emp; 不排序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值