南大通用GBase8s 常用SQL语句(255)

    1. SET EXPLAIN 语句

使用 SET EXPLAIN 语句来启用或禁用在当前的会话中查询的记录评估,包括查询优化器的计划、对返回行的数目的估计,以及该查询的相对成本。

语法

 

元素

描述

限制

语法

expression

返回文件名称规范的表达式

必须返回满足文件名称限制的字符串

表达式

file_name

说明输出文件名称。如果未包括文件的绝对路径,则会在默认的说明输出文件位置创建说明输出文件

必须符合操作系统规则。如果该文件已存在,则将说明输出追加在它后面。

引用字符串 

file_name_var

存储文件名称的主变量

必须为字符数据类型

特定于语言

用法

将来自 SET EXPLAIN ON 语句的输出指向适合的文件,直到您发出 SET EXPLAIN OFF 语句或直到程序结束为止。如果您未输入 SET EXPLAIN 语句,则缺省的行为是 OFF,且数据库服务器不生成查询的评估。

在数据库服务器优化阶段期间,执行 SET EXPLAIN 语句,当您初始化查询时会发生。对于与游标相关联的查询,如果准备该查询且没有主变量,则当您准备它时发生优化。否则,当您打开游标时,发生优化。

SET EXPLAIN 语句提供参与执行查询的工作的多种评估。

选项              作用

ON               为每一随后的查询生成评估并将结果写到当前目录中的输出文件。如果给文件已存在,则将新的输出追加到现有的文件之后。

AVOID_EXECUTE 防止 SELECT、INSERT、MERGE、UPDATE 或 DELETE 语句执行。数据库服务器将查询计划打印到输出文件

OFF              终止 SET EXPLAIN 语句的活动,以便于不再生成随后的查询的评估或写到输出文件

FILE TO          为每一随后的查询生成评估,并允许您指定说明输出文件的位置。

下列示例为当前会话中随后的查询将查询计划写到说明输出文件中:

SET EXPLAIN ON;

下列示例将查询计划追加写到当前会话中的文件:

SET EXPLAIN OFF;

使用 AVOID_EXECUTE 选项

AVOID_EXECUTE 关键字防止 DML 语句执行。相反,数据库服务器将查询计划打印到输出文件。

SET EXPLAIN ON AVOID_EXECUTE 语句为会话激活 Avoid Execute 选项,或直到下一不带 AVOID_EXECUTE 的 SET EXPLAIN OFF(或 ON)为止。如果您为包含远程表的查询激活 AVOID_EXECUTE,则该查询既不在本地也不在远程站点执行。

下列示例在指定的文件中存储输出。

SET EXPLAIN ON AVOID_EXECUTE;

SET EXPLAIN FILE TO '/tmp/explain.out';

当设置 AVOID_EXECUTE 时,数据库服务器发出警告消息。如果您正在使用 DB-Access,则它为任何选择、删除、更新或插入查询操作显示文本消息。

Warning! avoid_execute has been set

对于 ESQL,sqlwarn.sqlwarn7 字符设置为 'W'。

使用 SET EXPLAIN ON 或 SET EXPLAIN OFF 语句来关闭 AVOID_EXECUTE 选项。SET EXPLAIN ON 语句关闭 AVOID_EXECUTE 选项,但继续生成查询计划并将结果写到输出文件。

如果您在 SPL 例程中发出 SET EXPLAIN ON AVOID_EXECUTE 语句,则该 SPL 例程和任何 DDL 语句仍然执行,但在该 SPL 例程内部的 DML 语句不执行。数据库服务器将该 SPL 例程的查询计划打印到输出文件。要关闭此选项,您必须在该 SPL 例程的外部执行 SET EXPLAIN ON 或 SET EXPLAIN OFF 语句。如果您在执行 SPL 例程之前执行 SET EXPLAIN ON AVOID_EXECUTE 语句,则在该 SPL 例程内部的 DML 语句不执行,且数据库服务器不将该 SPL 例程的查询计划打印到输出文件。

当 AVOID_EXECUTE 生效时,仍然对查询中的恒定函数求值,因为数据库服务器在优化之前计算这些函数。

例如,即使不执行下列 SELECT 语句,也对 func( ) 函数求值:

SELECT * FROM orders WHERE func(10) > 5;

要了解 AVOID_EXECUTE 选项的其他性能影响,请参阅 GBase 8s 性能指南

如果您在 GBase 8s ESQL/C 程序中打开游标之前执行 SET EXPLAIN ON AVOID_EXECUTE 语句,则每一 FETCH 操作都返回找不到行的消息。然而,如果您在 GBase 8s ESQL/C 程序打开游标之后执行 SET EXPLAIN ON AVOID_EXECUTE,则此语句对游标不起作用,其继续返回行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值