优化程序可以告诉您它为响应任何语句而选择的查询优化策略(计划)。
优化程序的工作是理解查询的语义并构建用于计算查询结果的计划。该计划可能与您使用的语法并不完全对应。优化程序可以自由地以语义上等效的任意形式重写查询。
有关 Adaptive Server Anywhere 在重写查询时所遵循的规则的详细信息,请参见将子查询重写为 EXISTS 谓语和语义查询转换。
有关优化程序用来实现查询的方法的信息,请参见查询执行算法。
您可以在 Interactive SQL 中查看计划,也可以使用 SQL 函数查看计划。您可以选择检索以下几种不同格式的访问计划:
简单计划
详细计划
图形计划
含统计信息的图形计划
UltraLite(简单、详细或图形)
也可以用特定游标类型获得 SQL 查询的计划。
有关如何访问计划的详细信息,请参见对计划进行访问。有关如何读取计划的信息,请参见文本计划和图形式计划。
下面将介绍访问计划中显示的统计信息以及其它项。
下面是简单计划以及图形式计划的简称形式中使用的缩写:
| 名称 | 简单计划 / 简称 |
|---|---|
| 排除所有散列 | EAH |
| 排除散列 | EH |
| 散列分组依据 | GrByH |
| 散列表扫描 | HTS |
| 聚簇散列分组依据 | GrByHClust |
| 散列汇总分组依据 | GrByHR |
| 排序分组依据 | GrByO |
| 排序汇总分组依据 | GrByOR |
| 单行分组依据 | GrByS |
| 索引分组依据 | GrByI |
| 非重复散列 | DistH |
| 非重复索引 | DistI |
| 非重复排序 | DistO |
| 从顶部 N 排序 | StrN |
| 散列过滤 | HF |
| 交叉所有散列 | IAH |
| 交叉散列 | IH |
| 存在连接 | JE |
| 嵌套循环半连接 | JNLS |
| 散列存在 | JHE |
| 散列不存在 | JHNE |
| 散列连接 | JH |
| 排序块 | SrtBl |
| 左外散列连接 | JHO |
| 完全外散列连接 | JHFO |
| 递归散列连接 | JHR |
| 左外递归散列连接 | JHRO |
| 嵌套块连接 | JNB |
| 左外部嵌套块连接 | JNBO |
| 不存在连接 | JNE |
| 嵌套循环连接 | JNL |
| 左外部嵌套循环连接 | JNLO |
| 完全外部嵌套循环连接 | JNLFO |
| 合并连接 | JM |
| 左外部合并连接 | JMO |
| 完全外部合并连接 | JMFO |
| 排除合并 | EM |
| 排除所有合并 | EAM |
| 交叉合并 | IM |
| 交叉所有合并 | IAM |
| 行限制 | RL |
| 行重复 | RR |
| 派生表 | DT |
| 递归表 | RT.在简单计划中是 rt<seq> |
| 递归联合 | RU |
| Union all | UA |
| 表扫描 | In short plan is tablename<seq>.在图形式计划中就只是表名。 |
| 索引扫描 | 在简要计划中是 tablename<indexname>。在图形式计划中就只是表名。 |
| IN 列表 | IN |
有关算法的说明,请参见查询执行算法。
下面的统计信息是实际的测量值。
| 统计 | 解释 |
|---|---|
| Invocations | 从子树中请求行的次数。 |
| RowsReturned | 为当前节点返回的行数。 |
| RunTime | 执行子树所需的时间(包括执行子项所需的时间)。 |
| CacheHits | 成功读取高速缓存的次数。 |
| CacheRead | 已经在高速缓存中查找的数据库页数。 |
| CacheReadTable | 已经从高速缓存中读取表页数。 |
| CacheReadIndLeaf | 已经从高速缓存中读取的索引叶页数。 |
| CacheReadIndInt | 已经从高速缓存中读取的索引内部节点页数。 |
| DiskRead | 已经从磁盘中读取的页数。 |
| DiskReadTable | 已经从磁盘中读取的表页数。 |
| DiskReadIndLeaf | 已经从磁盘中读取的索引叶页数。 |
| DiskReadIndInt | 已经从磁盘中读取的索引内部节点页数。 |
| DiskWrite | 已经写入磁盘的页数(工作表页数或修改表页数)。 |
| IndAdd | 已经添加到索引中的条目数。 |
| IndLookup | 已经在索引中查找的条目数。 |
| FullCompare | 已经在索引中的散列值之上执行的比较次数。 |
| 统计 | 解释 |
|---|---|
| EstRowCount | 节点在每次被调用时将返回的预计行数。 |
| AvgRowCount | 每次调用时返回的平均行数。这不是预计值,而是按照 RowsReturned / Invocations 进行计算。如果该值与 EstRowCount 之间的差值很大,则说明选择性预计值可能会不正确。 |
| EstRunTime | 执行所需的预计时间(EstDiskReadTime、EstDiskWriteTime 和 EstCpuTime 的总和)。 |
| AvgRunTime | 执行所需的平均时间(测量值)。 |
| EstDiskReads | 从磁盘中读取的预计次数。 |
| AvgDiskReads | 从磁盘中读取的平均次数(测量值)。 |
| EstDiskWrites | 写入磁盘的预计次数。 |
| AvgDiskWrites | 写入磁盘的平均次数(测量值)。 |
| EstDiskReadTime | 从磁盘中读取行所需的预计时间。 |
| EstDiskWriteTime | 将行写入磁盘所需的预计时间。 |
| EstCpuTime | 执行所需的预计处理器时间。 |
| 项 | 解释 |
|---|---|
| 优化目标 | 确定优化查询处理的意图:是迅速返回第一行,还是为最大程度地降低返回整个结果集的成本。 |
| 优化负载 | 确定优化查询处理的目标是针对更新和读取混合进行的负载还是针对主要基于读取的负载。 |
| ANSI 更新约束 | 控制所允许的更新范围(选项包括 OFF、CURSORS 和 STRICT)。 |
| 优化级别 | 留作将来使用。 |
| 选择列表 | 查询所选择的表达式的列表。 |
| 项 | 解释 |
|---|---|
| 被锁定的表 | 所有被锁定的表及其关联的隔离级别的列表。 |
| 项 | 解释 |
|---|---|
| 表名 | 表的实际名称。 |
| 相关名 | 表的别名。 |
| 预计行数 | 表中的预计行数。 |
| 预计页数 | 表中的预计页数。 |
| 预计行大小 | 表的预计行大小。 |
| 页位置图 | 在使用页位置图来读取多页时为 [是]。 |
| 项 | 解释 |
|---|---|
| 索引名 | 索引的名称。 |
| 键类型 | 可以是 PRIMARY KEY(主键)、FOREIGN KEY(外键)、CONSTRAINT(唯一约束)或 UNIQUE(唯一索引)之一。如果索引是非唯一的辅助索引,则不会显示键类型。 |
| 深度 |
索引的高度。
有关详细信息,请参见表大小和页面大小。 |
| 预计叶页数 | 预计的叶页数。 |
| 基数 | 索引的基数(如果它不同于预计行数)。它仅适用于 Adaptive Server Anywhere 数据库版本 6.0 和更早版本。 |
| 选择性 | 匹配域范围的预计行数。 |
| 方向 | FORWARD(向前)或 BACKWARD(向后)。 |
| 域范围 | 域范围显示为列表 (col_name=value) 或 col_name IN [low, high]。 |
| 项 | 解释 |
|---|---|
| 谓语 |
在此节点中求出的搜索条件以及选择性预计值和测量值。
有关详细信息,请参见计划中的选择性 |
| 项 | 解释 |
|---|---|
| 生成值 | 输入中的不重复值的预计数。 |
| 探测值 | 查看谓语时输入中的不重复值的预计数。 |
| 位 | 选择生成散列映射的位数。 |
| 页数 | 存储散列映射所需的页数。 |
| 项 | 解释 |
|---|---|
| 联合列表 | UNION 操作中涉及的列。 |
| 项 | 解释 |
|---|---|
| 集合 | 所有集合函数。 |
| GROUP BY列表 | GROUP BY 子句中的所有列。 |
| 项 | 解释 |
|---|---|
| DISTINCT 列表 | DISTINCT 子句中的所有列。 |
| 项 | 解释 |
|---|---|
| IN 列表 | 指定集合中的所有表达式。 |
| 表达式 SQL | 要与该列表进行比较的表达式。 |
| 项 | 解释 |
|---|---|
| Order-by | 列出要作为排序依据的所有表达式。 |
| 项 | 解释 |
|---|---|
| 行限制计数 | 按照 FIRST 或 TOP n 的指定所返回的最大行数。 |
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。