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;