OceanBase CREATE OUTLINE

2021-06-10 15:18 更新

描述

該語(yǔ)句用來(lái)創(chuàng)建 Outline??梢酝ㄟ^(guò)兩種方式創(chuàng)建,一種是通過(guò) SQL_TEXT(用戶(hù)執(zhí)行的帶參數(shù)的原始語(yǔ)句),另一種是通過(guò) SQL_ID 創(chuàng)建。

說(shuō)明 
創(chuàng)建 OUTLINE 需要進(jìn)入對(duì)應(yīng)的 DataBase 下執(zhí)行。

格式

  • 使用 SQL_TEXT 創(chuàng)建 Outline
CREATE [OR REPLACE] OUTLINE outline_name ON stmt [ TO target_stmt ]
  • 使用 SQL_ID 創(chuàng)建 Outline
CREATE OUTLINE outline_name ON sql_id USING HINT hint;

參數(shù)解釋

參數(shù)

描述

outline_name

指定要?jiǎng)?chuàng)建的 Outline 名稱(chēng)。

OR REPLACE

指定OR REPLACE后,如果要?jiǎng)?chuàng)建的 Outline 已存在,則會(huì)替換原有的 Outline。

stmt

一般為一個(gè)帶有 Hint 和原始參數(shù)的 DML 語(yǔ)句。

TO target_stmt

如果不指定TO target_stmt,則表示如果數(shù)據(jù)庫(kù)接受的 SQL 參數(shù)化后與stmt去掉 Hint 參數(shù)化文本相同,則將該 SQL 綁定stmt中 Hint 生成執(zhí)行計(jì)劃;如果期望對(duì)含有 Hint 的語(yǔ)句進(jìn)行固定計(jì)劃,則需要TO target_stmt來(lái)指明原始的 SQL。

注意 

在使用target_stmt時(shí),嚴(yán)格要求stmt與 target_stmt在去掉 Hint 后完全匹配。

sql_id

如果sql_id對(duì)應(yīng)的 SQL 語(yǔ)句已經(jīng)有 Hint,則創(chuàng)建 Outline 指定的 Hint 會(huì)覆蓋原始語(yǔ)句中所有 Hint。

hint

格式為/*+ xxx */ 。

示例

  • 使用 SQL_TEXT 創(chuàng)建 Outline
CREATE OUTLINE otl_idx_c2 
       ON SELECT/*+ index(t1 idx_c2)*/ * FROM t1 WHERE c2 = 1;
  • 使用 SQL_ID 創(chuàng)建 Outline
CREATE OUTLINE otl_idx_c2 
ON "ED570339F2C856BA96008A29EDF04C74" 
USING HINT /*+ index(t1 idx_c2)*/ ;

注意事項(xiàng)

當(dāng) SQL_ID 相同時(shí),使用 SQL_TEXT 方式創(chuàng)建的 Outline 會(huì)覆蓋 SQL_ID 方式創(chuàng)建的 Outline,SQL_TEXT 方式創(chuàng)建的優(yōu)先級(jí)更高。

此外,OceanBase 數(shù)據(jù)庫(kù)通過(guò) SQL_ID 區(qū)分不同的 SQL,而 SQL_ID 是通過(guò) SQL_TEXT 取 MD5 加密得到的,相同的 SQL 文本即使多一個(gè)換行或制表符,MD5 得到的 SQL_ID 都會(huì)不同。在實(shí)際生產(chǎn)系統(tǒng)中,推薦通過(guò) SQL_ID 進(jìn)行 OUTLINE 綁定。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)