一分区连接是一种优化划分大连接两个表,其中一个必须在被分割的连接键,为几个较小的连接。
分区联接是以下之一:
- 完全分区智能联接 : 两个表必须在它们的连接键上等分,或使用引用分区(即,通过引用约束进行关联)。数据库将两个联接表的两个分区之间的较大联接分成较小的联接。
- 部分分区明智的联接 :连接键上仅分区了一个表。另一个表可以分区也可以不分区。
- 明智 : 分区联接的目的通过最小化联接并行执行时并行执行服务器之间交换的数据量,明智地联接可以减少查询响应时间。
- 分区明智联接的工作方式
当数据库不使用分区联接而将两个分区表串行联接时,单个服务器进程将执行联接。
也可以看看:
《 Oracle数据库VLDB和分区指南》详细介绍了按分区的联接
9.4.2.1分区明智联接的目的
分区联接通过最小化联接并行执行时在并行执行服务器之间交换的数据量来减少查询响应时间。
该技术大大减少了响应时间,并提高了CPU和内存的使用率。在Oracle Real Application Clusters(Oracle RAC)环境中,按分区的联接还可以避免或至少限制互连上的数据流量,这是实现大规模联接操作的良好可伸缩性的关键。
9.4.2.2 Partition-Wise连接的工作方式
当数据库在不使用分区方式的联接的情况下串行联接两个分区表时,将由单个服务器进程执行联接。
在下图中,联接不是分区分区的,因为服务器进程将表t1的每个分区连接到表的每个分区t2。
9.4.2.2.1完全分区明智的联接如何工作
数据库以串行或并行方式执行完整的分区方式连接。
下图显示了并行执行的完整分区连接。在这种情况下,并行性是一个分区。每个并行执行服务器均成对加入分区。例如,第一并行执行服务器将的第一个分区加入的第t1一个分区t2。然后,并行执行协调器将结果组合起来。
完全按分区的联接还可以将分区联接到子分区,这在表使用不同的分区方法时很有用。例如,customers按哈希分区,但sales按范围分区。如果sales按哈希进行子分区,则数据库可以在customers和的哈希子分区之间执行完整的分区方式联接sales。
在执行计划中,联接之前存在分区操作会发出信号,表示存在完整的分区方式联接,如以下代码段所示:
| 8 | PX分区哈希全部| | * 9 | 哈希联接|
也可以看看:
《 Oracle数据库VLDB和分区指南》详细介绍了完整的分区联接,并包括几个示例
9.4.2.2.2部分分区明智连接的工作方式
与完全按分区的对应连接不同,部分按分区的连接必须并行执行。
下图显示了t1已分区的和t2未分区之间的部分分区连接。
由于t2未分区,因此一组并行执行服务器必须t2根据需要从中生成分区。然后,一组不同的并行执行服务器将这些t1分区连接到动态生成的分区。并行执行协调器将结果组合在一起。
在执行计划中,该操作PX SEND PARTITION (KEY)将发出部分按分区的连接信号,如以下代码段所示:
| 11 | PX SEND PARTITION (KEY) |



