新聞中心
NO_REWRITE Hint
?NO_REWRITE? Hint 指示優(yōu)化器為禁用查詢?nèi)ブ貙懖樵儔K,并覆蓋了參數(shù) ?QUERY_REWRITE_ENABLED? 的設置。

創(chuàng)新互聯(lián)是一家專業(yè)提供沁縣企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站設計、成都做網(wǎng)站、H5高端網(wǎng)站建設、小程序制作等業(yè)務。10年已為沁縣眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設公司優(yōu)惠進行中。
以下是 ?NO_REWRITE? 的語法:
/*+ NO_REWRITE [ ( @ queryblock ) ] */示例如下:
SELECT /*+ NO_REWRITE */ sum(s.amount_sold) AS dollars
FROM sales s, times t
WHERE s.time_id = t.time_id
GROUP BY t.calendar_month_desc;NO_EXPAND Hint
?NO_EXPAND? Hint 指示優(yōu)化器不要對 ?WHERE? 子句中具有 ?OR? 條件或 ?IN? 列表的查詢考慮 ?OR? 擴展。 通常,優(yōu)化器會使用 ?OR? 擴展,當確定使用 ?OR? 擴展的成本低于不使用它時。
以下是 ?NO_EXPAND? Hint 的語法:
/*+ NO_EXPAND [ ( @ queryblock ) ] */示例如下:
SELECT /*+ NO_EXPAND */ *
FROM employees e, departments d
WHERE e.manager_id = 108
OR d.department_id = 110;USE_CONCAT Hint
?USE_CONCAT? Hint 指示優(yōu)化器使用 ?UNION ALL? 運算符將查詢 ?WHERE? 子句中的組合 ?OR? 條件轉(zhuǎn)換為復合查詢。 如果沒有這個 Hint,則僅當使用串聯(lián)查詢的成本低于比沒有串聯(lián)查詢的成本時,才會發(fā)生此轉(zhuǎn)換。?USE_CONCAT? Hint 將覆蓋成本注意事項。
以下是 ?USE_CONCAT? Hint 的語法:
/*+ USE_CONCAT [ ( @ queryblock ) ] */示例如下:
SELECT /*+ USE_CONCAT */ *
FROM employees e
WHERE manager_id = 108
OR department_id = 110;MERGE Hint
?MERGE? Hint 使您可以在查詢中合并視圖。
以下是 ?MERGE? Hint 的語法:
/*+ MERGE [ ( @ queryblock ) | ( [ @ queryblock ] tablespec ) ] */如果視圖的查詢塊在 ?SELECT? 列表中包含 ?GROUP B?Y 子句或 ?DISTINCT? 運算符時,只有啟用了復雜的視圖合并后,優(yōu)化器才能將視圖合并到正在訪問的語句中。 如果子查詢不相關,則也可以使用復雜合并將 ?IN? 子查詢合并到訪問語句中。
示例如下:
SELECT /*+ MERGE(v) */ e1.last_name, e1.salary, v.avg_salary
FROM employees e1,
(SELECT department_id, avg(salary) avg_salary
FROM employees e2
GROUP BY department_id) v
WHERE e1.department_id = v.department_id
AND e1.salary > v.avg_salary
ORDER BY e1.last_name;當不帶參數(shù)使用 ?MERGE? Hint 時,應將其放在視圖查詢塊中。 當視圖名稱作為參數(shù)使用
?MERGE? Hint 時,應將其放在周邊查詢中。
NO_MERGE Hint
?NO_MERGE? Hint 指示優(yōu)化器不要將外部查詢和任何內(nèi)聯(lián)視圖查詢合并到單個查詢中。
以下是 ?NO_MERGE? Hint 的語法:
/*+ NO_MERGE [ ( @ queryblock ) | ( [ @ queryblock ] tablespec ) ] */此 Hint 會影響您訪問視圖的方式。 例如,以下語句導致視圖 seattle_dept 不被合并:
SELECT /*+ NO_MERGE(seattle_dept) */ e1.last_name, seattle_dept.department_name
FROM employees e1,
(SELECT location_id, department_id, department_name
FROM departments
WHERE location_id = 1700) seattle_dept
WHERE e1.department_id = seattle_dept.department_id;在視圖查詢塊中使用 ?NO_MERGE? Hint 時,不需要為它指定參數(shù)。 在周圍的查詢中使用 ?NO_MERGE? Hint 時,需要將視圖名稱指定為它的參數(shù)。
UNNEST Hint
?UNNEST? Hint 指示優(yōu)化器不要嵌套而是并將子查詢的主體合并到包含該 Hint 的查詢塊的主體中,從而使優(yōu)化器在評估訪問路徑和聯(lián)接時將它們一起考慮在內(nèi)。
以下是 ?UNNEST? Hint 的語法:
/*+ UNNEST [ ( @ queryblock ) ] */在取消嵌套子查詢之前,優(yōu)化器首先驗證子查詢是否有效,并且必須通過探索和查詢優(yōu)化測試。 使用 ?UNNEST? Hint 時優(yōu)化器僅檢查子查詢塊的有效性。 如果子查詢塊有效,那么將直接取消嵌套子查詢,而無需通過探索和查詢優(yōu)化測試。
示例如下:
SELECT AVG(t1.c) FROM t1
WHERE t1.b >=
(SELECT /*+unnest*/AVG(t2.b)
FROM t2
WHERE t1.a = t2.a);NO_UNNEST Hint
?NO_UNNEST? Hint 用來關閉取消嵌套的操作。
以下是 ?NO_UNNEST? Hint 的語法:
/*+ NO_UNNEST [ ( @ queryblock ) ] */示例如下:
SELECT /*+no_unnest(@qb1)*/AVG(t1.c)
FROM t1 WHERE t1.b >=
(SELECT /*+qb_name(qb1)*/AVG(t2.b)
FROM t2)
WHERE t1.a = t2.a);PLACE_GROUP_BY Hint
?PLACE_GROUP_BY? Hint指示優(yōu)化器采用 GROUP BY 位置替換規(guī)則,此時優(yōu)化器不考慮轉(zhuǎn)換之后的代價增大。
以下是? PLACE_GROUP_BY? Hint的語法:
/*+ PLACE_GROUP_BY [ ( @ queryblock ) ] */示例如下:
SELECT /*+place_group_by*/SUM(t1.c),SUM(t2.c) FROM t1, t2
WHERE t1.a = t2.a AND t1.b > 10 AND t2.b > 10
GROUP BY t1.a;NO_PLACE_GROUP_BY Hint
?NO_PLACE_GROUP_BY? Hint 用來關閉 GROUP BY 位置替換轉(zhuǎn)換。
以下是 ?NO_PLACE_GROUP_BY? Hint的語法:
/*+ NO_PLACE_GROUP_BY [ ( @ queryblock ) ] */示例如下:
SELECT /*+no_place_group_by*/SUM(t1.c),SUM(t2.c) FROM t1, t2
WHERE t1.a = t2.a AND t1.b > 10 AND t2.b > 10
GROUP BY t1.a;NO_PRED_DEDUCE Hint
?NO_PRED_DEDUCE? Hint 用來指示優(yōu)化器不是用謂詞推導轉(zhuǎn)換規(guī)則。
以下是 ?NO_PRED_DEDUCE? Hint的語法:
/*+ NO_PRED_DEDUCE [ ( @ queryblock ) ] */示例如下:
SELECT /*+no_pred_deduce(@qb1)*/ *
FROM (
SELECT /*+no_merge qb_name(qb1)*/ t1.a, t2.b
FROM t1, t2
WHERE t1.a = t2.a) v, t3
WHERE t3.a = 1 AND t3.a = v.a; 網(wǎng)站欄目:創(chuàng)新互聯(lián)OceanBase教程:OceanBase 與查詢轉(zhuǎn)換相關的 Hint
當前網(wǎng)址:http://m.fisionsoft.com.cn/article/cocspjd.html


咨詢
建站咨詢
