文章目录


第四十四章 SQL命令 FREEZE PLANS

冻结查询计划。

大纲

FREEZE PLANS BY ID statement-hash

FREEZE PLANS BY TABLE table-name

FREEZE PLANS BY SCHEMA schema-name

FREEZE PLANS

参数

  • ​statement-hash​​ - 查询计划的SQL语句定义的内部哈希表示,用引号括起来。
    偶尔,看起来相同的SQL语句可能有不同的语句散列项。
    需要SQL语句的不同代码生成的设置/选项的任何差异都会导致不同的语句散列。
    这种情况可能发生在支持不同内部优化的不同客户机版本或不同平台上。
  • ​table-name​​ - 现有表或视图的名称。
    表名可以是限定的(​​schema.table​​),也可以是非限定的(​​table​​)。
    非限定表名接受默认模式名。
  • ​schema-name​​ - 现有模式的名称。
    该命令冻结指定模式中所有表的所有查询计划。
描述

​FREEZE PLANS​​命令用来冻结查询计划。

需要解冻已冻结的查询计划,使用​​unfreeze plans​​命令。

“冻结计划”可以冻结“计划状态”为“未冻结”的查询计划。

它不能冻结计划状态为“​​Unfrozen/Parallel​​”的查询计划。

​FREEZE PLANS​​为冻结查询计划提供了四种语法形式:

  • 指定的查询计划:​​FREEZE PLANS BY ID​​语句哈希。
    语句哈希值必须用双引号分隔。
  • 表的所有查询计划:​​FREEZE plans BY table table​​表名。
    可以指定表名或视图名。
    如果一个查询计划引用多个表和/或视图,指定其中任何一个表或视图都会冻结查询计划。
  • 模式中所有表的所有查询计划:​​FREEZE plans BY schema schema-name​​。
  • 当前命名空间中所有表的所有查询计划:​​FREEZE plans​​。

如果一个或多个查询计划被冻结,该命令将发出​​SQLCODE 0​​;

如果没有冻结查询计划,则发出​​SQLCODE 100​​。

受影响的行数(​​%ROWCOUNT​​)表示被冻结的查询计划数量。

其他接口

可以使用下面的​​$SYSTEM.SQL​​。

语句方法用于冻结单个查询计划或多个查询计划:用于单个计划的​​freezstatement ()​​;

​FreezeRelation()​​用于一个关系的所有计划(查询计划中引用的表或视图);

​FreezeSchema()​​用于一个模式的所有计划;

​FreezeAll()​​用于当前名称空间中的所有计划。

有相应的​​Unfreeze​​方法。