codecamp

OceanBase CREATE OUTLINE

描述

该语句用来创建 Outline。可以通过两种方式创建,一种是通过 SQL_TEXT(用户执行的带参数的原始语句),另一种是通过 SQL_ID 创建。

说明 
创建 OUTLINE 需要进入对应的 DataBase 下执行。

格式

  • 使用 SQL_TEXT 创建 Outline
CREATE [OR REPLACE] OUTLINE outline_name ON stmt [ TO target_stmt ]
  • 使用 SQL_ID 创建 Outline
CREATE OUTLINE outline_name ON sql_id USING HINT hint;

参数解释

参数

描述

outline_name

指定要创建的 Outline 名称。

OR REPLACE

指定OR REPLACE后,如果要创建的 Outline 已存在,则会替换原有的 Outline。

stmt

一般为一个带有 Hint 和原始参数的 DML 语句。

TO target_stmt

如果不指定TO target_stmt,则表示如果数据库接受的 SQL 参数化后与stmt去掉 Hint 参数化文本相同,则将该 SQL 绑定stmt中 Hint 生成执行计划;如果期望对含有 Hint 的语句进行固定计划,则需要TO target_stmt来指明原始的 SQL。

注意 

在使用target_stmt时,严格要求stmt与 target_stmt在去掉 Hint 后完全匹配。

sql_id

如果sql_id对应的 SQL 语句已经有 Hint,则创建 Outline 指定的 Hint 会覆盖原始语句中所有 Hint。

hint

格式为/*+ xxx */ 。

示例

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

注意事项

当 SQL_ID 相同时,使用 SQL_TEXT 方式创建的 Outline 会覆盖 SQL_ID 方式创建的 Outline,SQL_TEXT 方式创建的优先级更高。

此外,OceanBase 数据库通过 SQL_ID 区分不同的 SQL,而 SQL_ID 是通过 SQL_TEXT 取 MD5 加密得到的,相同的 SQL 文本即使多一个换行或制表符,MD5 得到的 SQL_ID 都会不同。在实际生产系统中,推荐通过 SQL_ID 进行 OUTLINE 绑定。

OceanBase CREATE INDEX
OceanBase CREATE RESOURCE POOL
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

OceanBase 控制台指南

OceanBase ODC 使用指南

OceanBase Web 版 ODC

OceanBase 客户端版 ODC

OceanBase Connector/J 开发者指南

OceanBase 什么是OceanBase Connector/J

OceanBase SQL 参考(MySQL 模式)

OceanBase SQL 参考(Oracle 模式)

OceanBase 基本元素

OceanBase 数据库对象

OceanBase 函数

OceanBase 单行函数

OceanBase 返回数字的字符串函数

OceanBase 通用比较函数

OceanBase 编码解码函数

OceanBase SQL 调优指南

OceanBase 相关协议

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }