用于分区数据库的连接方法

有多种连接方法可用于分区数据库环境,其中包括:并置连接、广播外表连接、定向外表连接、定向内表和外表连接、广播内表连接以及定向内表连接。

在下面的图中,q1、q2、和 q3 表示表队列。 所引用的表包含在两个数据库分区中,箭头指示表队列的发送方向。 协调程序数据库分区是数据库分区 0。

如果编译器选择的连接方法是散列连接,那么在每个远程数据库分区上创建的过滤器可用于在元组发送至处理该散列连接的数据库分区之前消除这些元组,从而改进分区。

并置连接

并置连接以本地方式在数据所在的数据库分区中发生。 该数据库分区在完成连接以后将数据发送到其他数据库分区。 要使优化器考虑并置连接,必须对所连接的表进行并置,并且所有各对相应分布键都必须参与等式连接谓词。 图 1 提供了一个示例。
图 1。 并置连接示例
并置连接的图形说明
LINEITEM 和 ORDERS 表都根据 ORDERKEY 列进行分区。 此连接以本地方式在每个数据库分区中执行。 在此示例中,假定连接谓词为: orders.orderkey = lineitem.orderkey

复制型具体化查询表 (MQT) 能够提高并置连接的可能性。

广播外表连接

广播外表连接代表一种并行连接策略,如果所连接的表之间没有等式连接谓词,那么可以使用此连接。 此连接也可用于其他证实此连接方法最合乎成本效益的情况。 例如,当有一个很大的表和一个很小的表,并且未根据连接谓词列对任何一个表进行分割时,可能会发生广播外表连接。 低成本方法是将较小的表广播至较大的表,而不是分割这两个表。 图 2 提供了一个示例。
图 2。 广播外表连接示例
广播外表连接的图形示例
ORDERS 表被发送到所有包含 LINEITEM 表的数据库分区。 表队列 q2 被广播至内表的所有数据库分区。

定向外表连接

在定向外表连接策略中,根据内表的分割属性将外表的每一行发送至内表的一个部分。 此连接在此数据库分区中进行。 图 3 提供了一个示例。
图 3。 定向外表连接示例
定向外表连接的图形示例

LINEITEM 表根据 ORDERKEY 列进行分区。 ORDERS 表根据另一个列进行分区。 ORDERS 表将进行散列并被发送到 LINEITEM 表的正确数据库分区。 在此示例中,假定连接谓词为: orders.orderkey = lineitem.orderkey

定向内表和外表连接

在定向内表和外表连接策略中,根据连接列的值,将外表和内表的行定向到一组数据库分区。 此连接在这些数据库分区中进行。 图 4 提供了一个示例。
图 4: 定向内表和外表连接示例
定向内表和外表连接的图形示例
两个表均未根据 ORDERKEY 列进行分区。 这两个表都将进行散列并被发送到新的数据库分区,它们将在那些数据库分区中进行连接。 表队列 q2 和 q3 都将被定向。 在此示例中,假定连接谓词为: orders.orderkey = lineitem.orderkey

广播内表连接

在广播内表连接策略中,将内表广播至外表的所有数据库分区。 图 5 提供了一个示例。
图 5。 广播内表连接示例
广播内表连接的图形示例

LINEITEM 表被发送到所有包含 ORDERS 表的数据库分区。 表队列 q3 被广播至外表的所有数据库分区。

定向内表连接

在定向内表连接策略中,根据外表的分割属性,将内表的每一行发送至外表的一个数据库分区。 此连接在此数据库分区中进行。 图 6 提供了一个示例。
图 6。 定向内表连接示例
定向内表连接的图形示例

ORDERS 表根据 ORDERKEY 列进行分区。 LINEITEM 表根据另一个列进行分区。 LINEITEM 表将进行散列并被发送到 ORDERS 表的正确数据库分区。 在此示例中,假定连接谓词为: orders.orderkey = lineitem.orderkey