ITPub博客

首页 > 数据库 > Oracle > Oracle 执行计划 访问路径

Oracle 执行计划 访问路径

Oracle 作者:j04212 时间:2014-02-13 11:24:58 0 删除 编辑


--访问路径

1、全表扫描 FTS(Full Table Scan)
如果要读取表的大部分行或着表很小时,全表扫描是有利的;如果只需要读取表的小部分行,则更适于索引扫描。


2、索引扫描(Index Scan)

索引扫描是用列数据的索引来快速查找于某些列值相匹配的行。索引的叶块包含数据的 ROWID。一旦确定了 ROWID,即可进行 ROWID 扫描。


3、索引范围扫描(Index Range Scan)

如果需要返回一个数据范围,并且存在列索引,可以使用一个更加有效的方法来利用索引访问数据。在查询中使用 between 、order by、大于、小于、小于等于、大于等于操作符会唤起索引范围扫描。


4、ROWID 查找

ROWID 可以通过给实际的数据文件、对象、块和块中的行做标记来唯一识别各行,以此查找一行数据。如果 ROWID 是事先已知的,则 ROWID 查找是访问一行数据的最快方法。但通常 ROWID 都是事先未知的。


5、索引挑扫(Index Skip Scan)

在 Oracle 9i以前的版本中,where 子句必须在复合索引中有主列才能使用。索引跳扫意味着不必有某个复合索引的全部主列就可以使用该索引。


6、快速全索引扫描(Fast Full Index Scan)

如果索引包含有需要返回的所有数据,那么就根本不需要访问表中的数据块。快速索引扫描只读取索引块,而不访问表中的数据。因此仅当 select 和 where 子句中只有索引列的时候,这种访问数据的速度才是可能的。


7、索引合并(Index Join)

索引合并并不是表合并,而是将多个索引合并到一起,并以类似于快速全索引扫描的方式使用。在查询中只能使用索引中的哪些列,否则就需要访问表。


--合并
当多个表参与查询时候,就需要将这些表以某种方式合并到一起。在from子句中出现多个表就说明需要合并。将多个表合并到一起有四种基本方法:Cartesian 合并、嵌套循环合并、排序合并、散列合并。合并操作只将两个表合并到一起。如果from 子句中有第三个表,就将前面两个表的合并结果与第三个表合并。这个过程会一直持续,知道将所有表都合并到一起,从而形成一个结果集。


1、Cartesian 合并(Cartesian Join)

要创建一个 Cartesian 合并(有时候称作 Cartesian 乘积),需要将一个表中的每行与另一个表中的每行相匹配。这需要对两个表都进行 FTS。许多时候都不需要 Cartesian 合并,可以通过在 where 子句中加入合并条件来插入 Carsian 合并。优化器偶尔会选择对两个非常小的表执行 Cartesian 合并,然后消除不参与合并的行。


2、嵌套循环合并(Nested Loop Join)

嵌套循环合并是最早的合并方法之一。这种合并方法首先要从参与合并的表中选出一个作为驱动表(或外部表),参与合并的另一个表则为内部表。要读取外部表的每一行,对外部表的每一行,都要在内部表中进行搜索,看是否可以匹配。对外部表是用FTS 进行访问的;对内部表则可用其他任何访问方法。当外部表较小并且内部表可以快速搜索以进行匹配(理想的是通过索引)时,应优先选用嵌套循环合并。


3、排序归并合并(Sort Merge Joins)

排序归并合并首先将两个表排序。排序后,将结果归并在一起以查找匹配的数据行。典型情况下,散列合并与嵌套循环合并优于排序归并合并。但是,如果数据已经排好序或者需要 non-equi-join 时,排序归并合并就较好。


4、散列合并(Hash Join)

为了进行散列合并,需要对两个表中较小的表运行散列函数。该散列函数创建一个表,该表中的数据可以很快查找到;随后对两表中较大的表运行相同的散列函数,如果第二个表中有一行与第一个表中的一行相匹配,那么就能很快查找到这行数据。当有足够的内存来存放整个小表时,散列合并效果最好。要能进行散列合并,首先必须进行 equi-join (查找两表中对等的记录)。


5、外部合并(Outer Join)

在前面的合并方法中,只有当在另外一个表中存在匹配时,才会在结果集中包含表中的行;反之亦然。在外部合并中,即使在另外一个表中没有匹配,表中所有的数据行都要参与合并。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27633655/viewspace-1080694/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle sql执行计划
请登录后发表评论 登录
全部评论

注册时间:2012-10-23

  • 博文量
    94
  • 访问量
    249083