DISTRIB

指定优化器如何分发联接键以实施联接。

语法

JOIN /*+DISTRIB(outer-join, inner-join)*/

参数

外联接
内联接
指定如何分发外联接和内连接上的数据:
  • L (当地):在各节点上对内联接键和外联接键进行相同分段,本地联接。

  • R (重新分段):内部和外部联接键没有进行相同分段。实施联接前对联接键数据进行重新分段。

  • B (广播):内部和外部联接键没有进行相同分段。实施联接前将此联接键的数据广播至其他节点。

  • F (筛选):联接表未分段。实施联接前根据需要按其他联接键筛选数据。

  • A (任意):让优化器自行选择最有效的分发方法。

描述

DISTRIB 提示指定优化器如何按顺序分发联接键以实施联接。如果指定的分发方法不可行,优化器会忽略提示并发出警告。

需要满足以下要求:

  • 包含 DISTRIB 提示的查询必须也包含 SYNTACTIC_JOIN 提示。否则,优化器会忽略 DISTRIB 提示并抛出一条警告。

  • 联接语法必须符合 ANSI SQL-92 联接约定。

示例

在以下查询中,联接受 DISTRIB 的提示 /*+DISTRIB(L,R)*/ 限定。此提示指示优化器先对联接键 stores.store_key 的数据进行重新分段,然后再将其联接至 sales.store_key 数据:

SELECT /*+SYNTACTIC_JOIN*/ sales.store_key, stores.store_name, sales.product_description, sales.sales_quantity, sales.sale_date
FROM (store.storeSales AS sales JOIN /*+DISTRIB(L,R),JTYPE(H)*/ store.store_dimension AS stores ON (sales.store_key = stores.store_key))
WHERE (sales.sale_date = '2014-12-01'::date) ORDER BY sales.store_key, sales.sale_date;