SET EXPLAIN 输出

查看 SET EXPLAIN 输出文件来分析关于执行了的查询的信息,包括查询的伪指令集、对查询成本的估算、对返回行数的估计、服务器访问的表中的顺序、索引键、连接方式和查询统计信息。

下表罗列可出现在输出文件中的术语及其意义。
表 1. 输出文件术语
术语 意义
查询 显示执行了的查询,并指示将 SET OPTIMIZATION 设置为了 HIGH 还是 LOW。如果您 SET OPTIMIZATION 为 LOW,则输出显示下列大写字符串作为第一行:QUERY:{LOW}

如果您 SET OPTIMIZATION 为 HIGH,则 SET EXPLAIN 的输出显示下列大写字符串作为第一行:QUERY:

后跟的伪指令 罗列查询的伪指令集

如果伪指令的语法不正确,则处理不带伪指令的查询。在那种情况下,输出在 DIRECTIVES FOLLOWED 之外还展示 DIRECTIVES NOT FOLLOWED

要获取更多关于在此术语之后指定的伪指令的信息,请参阅 优化程序伪指令SET OPTIMIZATION 语句

如果 DELETE 或 UPDATE 语句在 WHERE 子句中指定不相关联的子查询,则由该子查询返回的符合条件的行的集合具体化为临时表,SET EXPLAIN 的输出显示在下列消息的括号之内:(Temp Table For Subquery)

估计的成本 该查询的工作量的估计值

优化器使用估计值来比较一路径与另一路径的成本。估计值是优化器赋予被选择的访问方式的一个数。此数不直接地译为时间,且不用于比较不同的查询。然而,它可用于比较同一查询产生的更改。当使用数据分发时,带有较高估计值的查询通常比带有较小估计值的查询花费更长的运行时间。

在查询与子查询的情况下,返回两个估计的成本数字;查询数字还包括子查询成本。展示子查询成本以便于您可看到仅与子查询相关联的成本。

返回的行的估计数 要返回的行的数目的估计值

此数值是基于系统目录表中的信息的。

编号的列表 访问表的次序,后跟所使用的访问方式(索引路径或顺序扫描)

当查询涉及表继承时,罗列在超级表之下以访问它们的顺序为顺序的所有表。

索引名称 索引的名称

例如,idx1 是下列索引的名称:

Index Name: gbasedbt.idx1
索引名称中的 FOT 标识该索引为树型索引的森林:例如,下列索引是树型索引的森林:
Index Name: gbasedbt.fot_idx (FOT)
索引键

用作过滤器或索引的列;指示用于索引路径或过滤器的列名称。

符号 (Key Only) 指示所有期望的列都是索引键的一部分,因此索引的仅键读取可被实际表的读取所取代。在有 NLSCASE INSENSITIVE 属性的数据库中,所有索引扫描方式(仅键扫描除外)都允许查询执行计划将所有区分大小写的值映射到 NCHAR 和 NVARCHAR 列的单个值。要获取更多关于 NLSCASE INSENSITIVE 数据库的信息,请参阅 在 NLSCASE INSENSITIVE 数据库中重复的行

“下部索引过滤器”在索引读取开始处展示键值;在索引读取停止处展示键值的“上部索引过滤器”索引键过滤器展示将用在被检索的索引键值的过滤器。如果查询使用索引自连接路径,则“索引自连接键”展示用作自连接键的引导索引键,且下限上限展示引导索引键列的边界。

连接方式 当查询涉及两表之间的连接时,优化器使用的(“嵌套的循环”或“动态哈希”)连接方式展示在那个查询的输出的底部。

当查询涉及两表的动态连接时,如果输出包含词 Build Outer,则在罗列的第一个表(成为构建表)上构建哈希表。如果未出现词 Build Outer,则在罗列的第二个表上构建哈希表。

查询统计信息 当 EXPLAIN_STAT 配置参数设置为 1 时,这部分展示返回的行数、在查询计划中估计的行数、需要的时间、对 iterator 函数的调用,以及对表对象的扫描和连接操作的估计成本。
时间 当输出显示查询执行计划或那个计划的组件消耗的时间时,该值的格式为 minutes:seconds.fraction 来显示分、表和秒的小数部分。

如果查询使用核对顺序而不是 DB_LOCALE 设置的缺省顺序,则输出文件包括 DB_LOCALE 设置以及作为在该查询中(通过 SET COLLATION 指定的)核对基础的其他语言环境的名称。类似地,如果由于它的核对而不使用索引,则输出文件作此指示。