新聞中心
USE_MERGE Hint
?USE_MERGE? Hint 指示優(yōu)化器使用一個(gè) ?sort-merge? 聯(lián)接將每個(gè)指定的表與另一個(gè)行資源聯(lián)接起來。建議在使用 ?USE_NL? 和 ?USE_MERG? Hint 時(shí)和 ?LEADING? 與 ?ORDERED? Hint 一起使用。當(dāng)被引用的表是聯(lián)接的內(nèi)部表時(shí),優(yōu)化器將使用這些提示。如果被引用的表是外部表,則忽略 Hint。

以下是 ?USE_MERGE? Hint 的語法:
/*+ USE_MERGE ( [ @ queryblock ] tablespec [ tablespec ]... ) */?USE_MERGE?指定表作為內(nèi)部表時(shí)候使用 MERGE-JOIN 算法。OceanBase 中使用 MERGE-JOIN 算法時(shí)必須有等值條件的?join-condition?,因此無等值條件的兩個(gè)表做聯(lián)結(jié)時(shí),?USE_MERGE? 失效。
以下是 ?USE_MERGE? 的示例:
SELECT /*+ USE_MERGE(employees departments) */ *
FROM employees, departments
WHERE employees.department_id = departments.department_id;
NO_USE_MERGE Hint
?NO_USE_MERGE? Hint 指示優(yōu)化器在使用指定表作為內(nèi)部表并聯(lián)接到另一個(gè)行資源時(shí)排除 ?USE_MERGE? Hint 使用的聯(lián)接。
以下是 ?NO_USE_MERGE? Hint 的語法:
/*+ NO_USE_MERGE ( [ @ queryblock ] tablespec [ tablespec ]... ) */以下是 ?NO_USE_MERGE? Hint 的示例:
SELECT /*+ NO_USE_MERGE(e d) */ *
FROM employees e, departments d
WHERE e.department_id = d.department_id;
USE_HASH Hint
?USE_HASH? Hint 指示優(yōu)化器使用 HASH-JOIN 算法將每個(gè)指定的表與另一個(gè)行資源聯(lián)接起來。
以下是 ?USE_HASH? Hint 的語法:
/*+ USE_HASH ( [ @ queryblock ] tablespec [ tablespec ]... ) */以下是 ?USE_HASH? Hint 的示例:
SELECT /*+ USE_HASH(l h) */ *
FROM orders h, order_items l
WHERE l.order_id = h.order_id
AND l.order_id > 2400;
NO_USE_HASH Hint
?NO_USE_HASH? Hint 指示優(yōu)化器在使用指定表作為內(nèi)部表并聯(lián)接到另一個(gè)行資源時(shí)排除 ?USE_HASH? Hint 使用的聯(lián)接。
以下是 ?NO_USE_HASH? Hint 的語法:
/*+ NO_USE_HASH ( [ @ queryblock ] tablespec [ tablespec ]... ) */以下是 ?NO_USE_HASH? Hint 的示例:
SELECT /*+ NO_USE_HASH(e d) */ *
FROM employees e, departments d
WHERE e.department_id = d.department_id;
USE_NL Hint
?USE_NL? Hint 指示優(yōu)化器使用嵌套循環(huán)聯(lián)接將每個(gè)指定的表連接到另一個(gè)行資源,并使用指定的表作為內(nèi)部表,指定表作為內(nèi)部表時(shí)使用 NL-JOIN 算法。建議在使用 ?USE_NL? 和 ?USE_MERG? Hint 時(shí)和 ?LEADING? 與 ?ORDERED? Hint 一起使用。當(dāng)被引用的表是聯(lián)接的內(nèi)部表時(shí),優(yōu)化器將使用這些提示。如果被引用的表是外部表,則忽略 Hint。
以下是 ?USE_NL? Hint 的語法:
/*+ USE_NL ( [ @ queryblock ] tablespec [ tablespec ]... ) */在下面的示例中,Hint 強(qiáng)制執(zhí)行了嵌套循環(huán),通過全表掃描訪問了 orders 并且篩選條件 ?l.order_id = h.order_id? 應(yīng)用在了每一行。對(duì)于滿足篩選條件的每一行,通過索引 order_id 訪問 order_items:
SELECT /*+ USE_NL(l h) */ h.customer_id, l.unit_price * l.quantity
FROM orders h, order_items l
WHERE l.order_id = h.order_id;
NO_USE_NL Hint
?NO_USE_NL? Hint 指示優(yōu)化器在使用指定表作為內(nèi)部表并聯(lián)接到另一個(gè)行資源時(shí)排除 Nest-Loop 聯(lián)接。
以下是 ?NO_USE_NL? Hint 的語法:
/*+ NO_USE_NL ( [ @ queryblock ] tablespec [ tablespec ]... ) */以下是 ?NO_USE_NL? Hint 的示例:
SELECT /*+ NO_USE_NL(e d) */ *
FROM employees e, departments d
WHERE e.department_id = d.department_id;
USE_BNL Hint
?USE_BNL? Hint 指示優(yōu)化器使用塊嵌套循環(huán)聯(lián)接將每個(gè)指定的表連接到另一個(gè)行資源,并使用指定的表作為內(nèi)部表,指定表作為內(nèi)部表時(shí)使用 BNL-JOIN 算法。建議在使用 ?USE_BN? Hint 時(shí)和 ?LEADING? 與 ?ORDERED? Hint 一起使用。當(dāng)被引用的表是聯(lián)接的內(nèi)部表時(shí),優(yōu)化器將使用這些提示。如果被引用的表是外部表,則忽略 Hint。
以下是 ?USE_BNL? Hint 的語法:
/*+ USE_BNL ( [ @ queryblock ] tablespec [ tablespec ]... ) */在下面的示例中,Hint 強(qiáng)制執(zhí)行了塊嵌套循環(huán),通過全表掃描訪問了 orders 并且篩選條件 ?l.order_id = h.order_id? 應(yīng)用在了每一行。對(duì)于滿足篩選條件的每一行,通過索引 order_id 訪問 order_items:
SELECT /*+ USE_BNL(l h) */ h.customer_id, l.unit_price * l.quantity
FROM orders h, order_items l
WHERE l.order_id = h.order_id;
NO_USE_BNL Hint
?NO_USE_BNL? Hint 指示優(yōu)化器在使用指定表作為內(nèi)部表并聯(lián)接到另一個(gè)行資源時(shí)排除 ?USE_BNL? Hint 使用的聯(lián)接。
以下是 ?NO_USE_BNL? Hint 的語法:
/*+ NO_USE_BNL ( [ @ queryblock ] tablespec [ tablespec ]... ) */以下是 ?NO_USE_BNL? Hint 的示例:
SELECT /*+ NO_USE_BNL(e d) */ *
FROM employees e, departments d
WHERE e.department_id = d.department_id; 當(dāng)前標(biāo)題:創(chuàng)新互聯(lián)OceanBase教程:OceanBase與聯(lián)接操作相關(guān)的Hint
網(wǎng)頁鏈接:http://fisionsoft.com.cn/article/dpidjee.html


咨詢
建站咨詢
