W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
?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 指示優(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 指示優(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 指示優(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 指示優(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)用在了每一行。對于滿足篩選條件的每一行,通過索引 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 指示優(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 指示優(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)用在了每一行。對于滿足篩選條件的每一行,通過索引 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 指示優(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;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: