数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle中表的连接及其调整


发布日期:2023年05月19日
 
Oracle中表的连接及其调整
在日常基于数据库应用的开发过程中我们经常需要对多个表或者数据源进行关联查询而得出我们需要的结果集那么Oracle到底存在着哪几种连接方式?优化器内部又是怎样处理这些连接的?哪种连接方式又是适合哪种查询需求的?只有对这些问题有了清晰的理解后我们才能针对特定的查询需求选择合适的连接方式开发出健壮的数据库应用程序选择合适的表连接方法对SQL语句运行的性能有着至关重要的影响下面我们就Oracle常用的一些连接方法及适用情景做一个简单的介绍

嵌套循环连接(Nested Loop)

嵌套循环连接的工作方式是这样的

Oracle首先选择一张表作为连接的驱动表这张表也称为外部表(Outer Table)由驱动表进行驱动连接的表或数据源称为内部表(Inner Table)

提取驱动表中符合条件的记录与被驱动表的连接列进行关联查询符合条件的记录在这个过程中Oracle首先提取驱动表中符合条件的第一条记录再与内部表的连接列进行关联查询相应的记录行在关联查询的过程中Oracle会持续提取驱动表中其他符合条件的记录与内部表关联查询这两个过程是并行进行的因此嵌套循环连接返回前几条记录的速度是非常快的在这里需要说明的是由于Oracle最小的IO单位为单个数据块因此在这个过程中Oracle会首先提取驱动表中符合条件的单个数据块中的所有行再与内部表进行关联连接查询的然后提取下一个数据块中的记录持续地循环连接下去当然如果单行记录跨越多个数据块的话就是一次单条记录进行关联查询的

嵌套循环连接的过程如下所示