更新时间:2026-07-28 GMT+08:00
分享

特性概述

功能定义

用户可指定相同的SQL模板语句,重复执行该语句时可以跳过解析和计划生成操作,复用上次执行时生成的计划缓存,从而提升执行速度。用户可以在SQL语句上设置绑定参数,每次执行时绑定不同参数,复用计划模板。可分为以下步骤:

  • 预编译阶段:发送一个SQL语句(可绑定参数),并提供一个语句名作为键Key。
  • 执行阶段:指定语句名Key,并提供参数值以执行已编译缓存的SQL语句。

    其中绑定参数非必选项,需要在相同SQL模板上设置不同参数时指定即可。当业务涉及的SQL查询重复率高时,适合使用预编译计划缓存的方式执行。

可通过JDBC中PreparedStatement相关方法、gsql中PREPARE EXECUTE语法等方式使用预编译计划缓存功能。JDBC具体用法请参见执行SQL语句,PREPARE EXECUTE具体用法请参见《参考》中“SQL参考 > SQL语法 > P > PREPARE”章节。

在存储过程定义中的固定SQL语句默认会在第一次执行时将SQL语句解析并生成计划缓存,可复用计划。

规格约束

  1. 预编译的语句和对应Key为会话级别(并非全局共享),只能在本会话内使用Key映射到预期计划中,当计划无法共享时,计划也为会话内私有。
  2. 在生成Generic Plan复用缓存计划时,如果修改仅影响计划的GUC参数,不会直接生效影响正在执行的复用计划。在生成Custom Plan的时,计划每次会新建,修改仅影响计划的GUC参数会及时生效。
  3. 如果计划缓存所依赖的对象发生变化(如:表被执行ALTER修改或ANALYZE刷新)时,计划缓存会由于依赖对象元信息发生变化而被标记为失效,触发计划失效后,会引发计划重建以及系统开销,可能引发性能波动。
  4. 如果预备语句所依赖的表结构发生变化(例如添加、删除或修改列定义),缓存计划中期望的结果结构可能与实际的表结构不匹配,后续执行该语句时,将导致非预期结果。

相关文档