更新时间:2018-04-27 22:09
在使用DRDS数据库的过程中,可能遇到某些SQL优化器生成的执行计划,并不是期望的结果,或者生成的计划并不是最优的,比如有些Join、Aggregate 函数可以下推到下层RDS执行的,但是并没有下推。OUTLINE功能提供了一种给SQL指定执行计划的方式,用户可以通过Hint的方式手工构建SQL的执行计划,并通过OUTLINE的方式指定SQL的执行计划为用户构建的执行计划。
OUTLINE功能提供了CREATE,DROP,RESYNC,DISABLE,ENABLE,SHOW指令来创建和管理系统中的OUTLINE,下面对各个指令进行说明。
CREATE 指令用来创建OUTLINE,创建后默认生效。
CREATE OUTLINE name ON origin_stmt TO target_stmt
name 是指创建的outline名称
origin_stmt 是指用来匹配SQL语句。当SQL不含"?"变量时,匹配必须完全相同,为完全匹配模式;
当含有"?"变量时,SQL中不能包含常量,并将SQL格式化后来做匹配,为参数化匹配模式
target_stmt 是指用hint方式指定生成逻辑计划的语句
示例一:创建一个完全匹配的OUTLINE。
mysql> create outline t1 on select 1 to select 2;
Query OK, 1 row affected (1.09 sec)
mysql> select 1;
+------+
| ? |
+------+
| 2 |
+------+
可以看到执行的时候select 1语句被替换为select 2语句了。
示例二:创建一个参数化匹配的OUTLINE。
mysql> create outline t2 on select ? to select /*+TDDL:slave()*/ * from ms10 where c1=?;
Query OK, 1 row affected (0.16 sec)
mysql> explain select 1;
+----------------------------------------------------------------------------+
| LOGICAL PLAN |
+----------------------------------------------------------------------------+
| LogicalView(tables="01.ms10", sql="SELECT * FROM `ms10` WHERE (`c1` = ?)") |
| HitCache:false |
| UsingOutline: T2 |
+----------------------------------------------------------------------------+
DROP 指令用来删除指定的OUTLINE。
DROP OUTLINE name
name 是指删除的outline名称
由于DRDS 实例是由多台 Server 组成的,创建 OUTLINE 时,可能会出现同步到其他 Server 报 SYNC error,这时需要从新同步。
RESYNC OUTLINE name
name 是指需要同步的outline名称
DISABLE 指令用来停用指定的OUTLINE。
DISABLE OUTLINE name
name 是指定的outline名称
ENABLE 指令用来启用指定的OUTLINE。
ENABLE OUTLINE name
name 是指定的outline名称
SHOW 指令用来显示系统中的OUTLINES。
SHOW OUTLINES
在文档使用中是否遇到以下问题
更多建议
匿名提交