Collection Contents 上一页 下一页 PDF

ASA SQL 用户指南

查询优化与执行

读取访问计划


优化程序可以告诉您它为响应任何语句而选择的查询优化策略(计划)。

优化程序的工作是理解查询的语义并构建用于计算查询结果的计划。该计划可能与您使用的语法并不完全对应。优化程序可以自由地以语义上等效的任意形式重写查询。

有关 Adaptive Server Anywhere 在重写查询时所遵循的规则的详细信息,请参见将子查询重写为 EXISTS 谓语语义查询转换

有关优化程序用来实现查询的方法的信息,请参见查询执行算法

您可以在 Interactive SQL 中查看计划,也可以使用 SQL 函数查看计划。您可以选择检索以下几种不同格式的访问计划:

也可以用特定游标类型获得 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 执行所需的预计处理器时间。
计划中与 SELECT、INSERT、UPDATE 和 DELETE 相关的项 
解释
优化目标 确定优化查询处理的意图:是迅速返回第一行,还是为最大程度地降低返回整个结果集的成本。

请参见 OPTIMIZATION_GOAL 选项 [database]

优化负载 确定优化查询处理的目标是针对更新和读取混合进行的负载还是针对主要基于读取的负载。

请参见 OPTIMIZATION_WORKLOAD 选项 [database]

ANSI 更新约束 控制所允许的更新范围(选项包括 OFF、CURSORS 和 STRICT)。

请参见 ANSI_UPDATE_CONSTRAINTS 选项[compatibility]

优化级别 留作将来使用。
选择列表 查询所选择的表达式的列表。
计划中与锁相关的项 
解释
被锁定的表 所有被锁定的表及其关联的隔离级别的列表。
计划中与扫描相关的项 
解释
表名 表的实际名称。
相关名 表的别名。
预计行数 表中的预计行数。
预计页数 表中的预计页数。
预计行大小 表的预计行大小。
页位置图 在使用页位置图来读取多页时为 [是]。
计划中与索引扫描相关的项 
解释
索引名 索引的名称。
键类型 可以是 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列表 GROUP BY 子句中的所有列。
计划中与 DISTINCT 相关的项 
解释
DISTINCT 列表 DISTINCT 子句中的所有列。
计划中与 IN 列表相关的项 
解释
IN 列表 指定集合中的所有表达式。
表达式 SQL 要与该列表进行比较的表达式。
计划中与 SORT 相关的项 
解释
Order-by 列出要作为排序依据的所有表达式。
计划中与行限制相关的项 
解释
行限制计数 按照 FIRST 或 TOP n 的指定所返回的最大行数。

文本计划
图形式计划
对计划进行访问

Collection Contents 上一页 下一页 PDF