
# 特性概述
#### 功能定义
- 相同语句计划复用：是一项通过缓存执行计划优化查询性能的技术。其核心原理是缓存SQL语句及已生成的执行计划，当后续遇到相同SQL文本的SQL语句（包括所有字面值、大小写、空格等都需相同）时，直接复用缓存计划，从而跳过重复的解析、优化等耗时阶段。该功能支持GSQL发送的简单查询和PBE（包含batch）场景，SQL文本中可以包含用户指定的绑参。
- 自动参数化：参数化过程会将SQL语句中的字面量替换为绑定参数变量。当参数化后的SQL语句相同，可复用同一个计划模板。支持简单查询和PBE（包含batch）中无绑定参数的场景。原始SQL语句不能存在用户指定绑定参数，如果已包含用户指定绑参，仅能支持相同语句计划复用。
相同语句计划复用技术和自动化参数技术可通过GUC参数cursor_sharing控制，GUC参数cursor_sharing的行为介绍，请参见《参考》中"数据库运行参数说明 \> GUC参数说明 \> 查询规划 \> 其他优化器选项"章节。
- 当GUC参数cursor_sharing设置为force时，同时启用自动参数化以及相同语句计划复用功能。对于满足自动参数化条件的语句，则优先通过自动参数化缓存；满足不了则通过相同语句计划复用缓存。例如在MYSQL或M兼容模式下，不支持参数化，会自动按照cursor_sharing = exact的行为实现。
- 当GUC参数cursor_sharing设置为exact时，仅启用相同语句计划复用功能。
- 当GUC参数cursor_sharing设置为off时，关闭自动参数化以及相同语句计划复用功能。 在计划模板无法复用的情况下，无法通过计划复用带来性能提升。且如果存入大量不同的SQL模板，会引起计划缓存内存占用过多，触发计划内存上限淘汰，导致性能下降，极端场景下可能会引起掉零。
  
 
#### 规格约束
- 相同语句计划复用：
  - 仅支持简单查询语句以及PBE语句。
  
  - 仅支持DML语句。
  
  - 不支持存储过程内语句。
  
  - M-Compatibility兼容模式下，不支持SHOW INDEX语句以及不支持SELECT INTO outfile语句。
   
- 自动参数化：
  - 仅支持简单查询语句以及无绑定参数的PBE（包含batch场景）语句。
  
  - 仅支持DML语句。
  
  - 不支持存储过程内语句。
  
  - 不支持语句本身含有绑定参数的语句。
  
  - 不支持lightproxy场景下含GSI表的语句。
  
  - 不支持含有DBLINK表的语句。
  
  - 不支持MYSQL兼容模式数据库。
  
  - M-Compatibility兼容模式下，设置GUC参数m_format_behavior_compat_options包含select_column_name选项后，不支持自动参数化。
  
  - M-Compatibility兼容模式下，存在用户变量的语句不支持自动参数化。
  
  - M-Compatibility兼容模式下，不支持SHOW INDEX语句自动参数化，不支持SELECT INTO outfile语句自动参数化。
  
  - 部分常量不支持参数化，包含类型后面的精度常量，如：int(n)、ORDER BY/GROUP BY后的列常量、Hint内常量、_charset后的常量以及分区表分区中的常量等。
   
 
