OceanBase CREATE OUTLINE

2021-06-28 14:28 更新

描述

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

注意 

創(chuàng)建 OUTLINE 需要進入對應的用戶下執(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

指定要創(chuàng)建的 OUTLINE 名稱。

OR REPLACE

指定 OR REPLACE 后,如果要創(chuàng)建的 OUTLINE 已存在,則會替換原有的 OUTLINE。

stmt

一般為一個帶有 hint 和原始參數(shù)的 DML 語句。

TO target_stmt

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

注意 

在使用 target_stmt 時,嚴格要求 stmt 與 target_stmt 在去掉 hint 后完全匹配。

sql_id

如果 sql_id 對應的 SQL 語句已經(jīng)有 hint,則創(chuàng)建OUTLINE 指定的 hint 會覆蓋原始語句中所有 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)*/ ;

注意事項

當 SQL_ID 相同時,使用 SQL_TEXT 方式創(chuàng)建的 OUTLINE 會覆蓋 SQL_ID 方式創(chuàng)建的 OUTLINE,SQL_TEXT 方式創(chuàng)建的優(yōu)先級更高。

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號