OceanBase 其他 Hint

2021-06-17 17:47 更新

QB_NAME Hint

使用 ?QB_NAME? Hint 來定義查詢塊的名稱。然后,可以在外部查詢的 Hint 中使用這個(gè)名稱,也可以在內(nèi)聯(lián)視圖的 Hint 中使用這個(gè)名稱,從而影響查詢在被命名查詢塊中的表上的執(zhí)行。更多關(guān)于查詢塊名稱的信息,請參閱文檔 Hint 概述 中的在 Hint 中定義查詢塊。

以下是 ?QB_NAME? Hint 的語法:

/*+ QB_NAME ( queryblock ) */

如果兩個(gè)或多個(gè)查詢塊具有相同的名稱,或者同一個(gè)查詢塊兩次被 Hint 指定了不同的名稱,那么優(yōu)化器將忽略所有引用該查詢塊的名稱和 Hint。未使用 ?QB_NAME? Hint 命名的查詢塊具有由系統(tǒng)生成的惟一名稱。這些名稱可以顯示在計(jì)劃表中,也可以在查詢塊中的其他 Hint 中使用。

以下是 ?QB_NAME? Hint 的示例:

SELECT /*+ QB_NAME(qb) FULL(@qb e) */ employee_id, last_name
  FROM employees e
  WHERE last_name = 'Smith';

READ_CONSISTENCY Hint

?READ_CONSISTENCY? Hint 指示服務(wù)器去指定某條 SQL 所讀取的表模式為弱一致(指定參數(shù)

?WEAK?)或強(qiáng)一致性(指定參數(shù) ?STRONG?)。

以下是 ?READ_CONSISTENCY? Hint 的語法:

/*+ READ_CONSISTENCY(WEAK[STRONG]) */

示例如下:

SELECT /*+ READ_CONSISTENCY(WEAK) */ * 
  FROM employees 
  WHERE employees.department_id = 1001;

FROZEN_VERSION Hint

?FROZEN_VERSION? Hint 指示服務(wù)器讀取某個(gè)基線數(shù)據(jù)的版本。

以下是 ?FROZEN_VERSION? Hint 的語法:

/*+ FROZEN_VERSION (intnum) */

示例如下:

SELECT /*+ FROZEN_VERSION(1000) */ *
  FROM employees e
  WHERE e.department_id = 1001;

QUERY_TIMEOUT Hint

?QUERY_TIMEOUT? Hint 指示服務(wù)器設(shè)定某條 SQL 執(zhí)行時(shí)的超時(shí)時(shí)間,單位為微妙。

以下是 ?QUERY_TIMEOUT? Hint 的語法:

/*+ QUERY_TIMEOUT (intnum) */

示例如下,當(dāng)該查詢 1 秒之內(nèi)未執(zhí)行完該語句即返回超時(shí)錯(cuò)誤:

SELECT /*+ QUERY_TIMEOUT(1000000) */ *
  FROM employees e
  WHERE e.department_id = 1001;

LOG_LEVEL Hint

?LOG_LEVEL? Hint 指示服務(wù)器運(yùn)行某句 SQL 時(shí)采用何種日志級別來執(zhí)行。

以下是 ?LOG_LEVEL? Hint 的語法:

/*+ LOG_LEVEL ([']log_level[']) */

以下示例采用 ?DEBUG? 日志級別來執(zhí)行該 SQL 語句:

SELECT /*+ LOG_LEVEL(DEBUG) */ *
  FROM employees e
  WHERE e.department_id = 1001;

USE_PLAN_CACHE Hint

?USE_PLAN_CACHE? Hint 指示服務(wù)器執(zhí)行某條 SQL 時(shí)是否要在計(jì)劃緩存機(jī)制下運(yùn)行,參數(shù) ?NONE? 為不執(zhí)行計(jì)劃緩存機(jī)制,參數(shù) ?DEFAULT? 表示按照服務(wù)器本身的設(shè)置來決定是否執(zhí)行計(jì)劃緩存機(jī)制。

以下是 ?USE_PLAN_CACHE? Hint 的語法:

/*+ USE_PLAN_CACHE (NONE[DEFAULT]) */

示例如下,以下語句不執(zhí)行計(jì)劃緩存機(jī)制:

SELECT /*+ USE_PLAN_CACHE(NONE) */ *
  FROM employees e
  WHERE e.department_id = 1001;

TRANS_PARAM Hint

?TRANS_PARAM? Hint 指示服務(wù)器執(zhí)行事務(wù)時(shí)是否要按照參數(shù) ?param? 指定的參數(shù)來執(zhí)行,現(xiàn)在支持的參數(shù)只有事務(wù)層面的提前解行鎖 ?FORCE_EARLY_LOCK_FREE? 參數(shù),?FORCE_EARLY_LOCK_FREE?的值為 TRUE 時(shí)表示支持,FALSE 表示不支持。注意這里的參數(shù)名和參數(shù)值要用單引號(‘ ’)引起來,當(dāng)參數(shù)的值為數(shù)值型時(shí)可以不用引號引起來。

以下是 ?TRANS_PARAM? Hint 的語法:

/*+ TRANS_PARAM ['param' , 'param_value'] */

示例如下:

SELECT /*+ TRANS_PARAM('FORCE_EARLY_LOCK_FREE' 'TRUE') */ *
  FROM employees e
  WHERE e.department_id = 1001;

TRACING Hint

?TRACING? Hint 指示服務(wù)器對某些執(zhí)行計(jì)劃中的算子采用 ?TRACING? 跟蹤。

以下是?TRACING? Hint 的語法:

/*+ TRACING(TRACING_NUM_LIST)*/

示例如下:

SELECT /*+ TRACING(1) */ *
  FROM employees e
  WHERE e.department_id = 1001;

STAT Hint

?STAT? Hint 指示對某些執(zhí)行計(jì)劃中的算子采用 ?STAT? 顯示信息。

以下是 ?STAT? Hint 的語法:

/*+ STAT(TRACING_NUM_LIST) */

示例如下:

SELECT /*+ STAT(1) */ *
  FROM employees e
  WHERE e.department_id = 1001;

TOPK Hint

?TOPK? Hint 指示服務(wù)器設(shè)置模糊查詢的精度和最小行數(shù)。其中參數(shù) ?PRECSION? 的值為整型,取值范圍為 0~100,表示執(zhí)行模糊查詢時(shí)的行數(shù)百分比,參數(shù) ?MINIMUM_ROWS? 用來指定最小的返回行數(shù)。

以下是 ?TOPK? Hint 的語法:

/*+ TOPK(PRECISION MINIMUM_ROWS) */

示例如下:

SELECT /*+ TOPK(1,10) */ *
  FROM employees e
  WHERE e.department_id = 1001;

TRACE_LOG Hint

?TRACE_LOG? Hint 指示服務(wù)器收集跟蹤日志(Trace log),收集的跟蹤日志(Trace log)在運(yùn)行 ?SHOW TRACE? 命令時(shí)展示。

以下是 ?TRACE_LOG? Hint 的語法:

/*+ TRACE_LOG */

示例如下:

SELECT /*+ TRACE_LOG */ *
  FROM employees e
  WHERE e.department_id = 1001;


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號