nested loop ,sort-merger join ,hash join, index join,cluster join.
nested loop :嵌套表连接:oracle从第一个行源中读取第一行,然后和第二个行源中的数据进行对比。所有匹配的结果集中,然后oracle将读取第一个行源中的下一行。按这种方式直至第一个数据源中的所有行都经过处理。第一个行源通常称为外部表或者驱动表,相应的第二个行源称为内部表。使用嵌套循环连接是一种从结果中提取第一批记录的最快速方法。在驱动行源表比较小或者内部行源表已连接的列有唯一的索引或高度可选的非唯一索引时,嵌套循环连接效果是比较理想。嵌套循环连接的优势是可以不用返回所有结果就得到第一批结果集。
sort merger 排序合并连接:第一,二张表他们各自要连接的列排序,然后将两个已经排序的源表进行排序,然后将两个已经排序的源表合并。(只能用于等价连接)。(搜索条件模糊,缺乏索引时用)
cluster join :集群连接,是嵌套循环连接的一种特例。如果连接的两张行源表实际上是集群中的表,并且连接是两张行源表的集群键间的等价连接。oracle从第一个行源读一行,并在第二张行源表中使用cluster索引查找所有匹配的项。集群的索引效率极高,因为两个参加连接的行源表实际上处于同一个物理数据块上。
hash join 散列连接:当内存能提供足够的空间时,散列连接通常是oracle优化器通常的选择。在散列连接中oracle访问一张表(通常是连接结果中较小的表),并在内存中建立一张基于连接键的散列表。然后它扫描连接中其他的表,并根据散列表检测是否有匹配的记录。(搜索条件模糊,缺乏索引时用)
index join :索引连接,如果一组已存在的索引包含了查询所需要的所有信息,那么优化器将在索引中选择地生成一组散列表。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25155154/viewspace-688763/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25155154/viewspace-688763/