集合 目录 索引 窗口函数算法 下一页 PDF

SQL Anywhere 服务器 - SQL 用法  > 查询优化与执行

读取执行计划


执行计划是数据库服务器用来访问数据库中与语句相关的信息的步骤集。无论语句的执行计划是否刚经过优化、是否跳过了优化程序,也无论其计划是否是从先前的执行进行的高速缓存,均可进行保存和查看。查询执行计划可能会与初始语句中所使用的语法不完全对应。但在语义上是等效的,而且可使用实现化视图 (Materialized View) 来代替查询中显式指定的基表。

有关语句在其执行之前要经历的阶段的详细信息,请参见查询处理的阶段

有关数据库服务器在重写查询时所遵循的规则的详细信息,请参见语义查询转换使用实现化视图 (Materialized View) 提高性能

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

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

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

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

还可以通过使用 GRAPHICAL_PLAN 和 EXPLANATION 函数并利用特定的游标类型来获取 SQL 查询的计划。请参见GRAPHICAL_PLAN 函数 [Miscellaneous]EXPLANATION 函数 [Miscellaneous]

有关如何保存和查看计划的详细信息,请参见访问执行计划

有关如何读取执行计划的信息,请参见文本计划图形式计划

下面将介绍访问计划中显示的统计信息以及其它项。

计划中使用的缩写

下面是简要计划以及图形式计划的简称形式中使用的缩写:

缩写 名称
DELETE删除
DistH非重复散列
DistO非重复排序
DT派生表
EAH排除所有散列
EAM排除所有合并
EH排除散列
EM排除合并
Exchange交换
Filter过滤
FS文件扫描
GrByH散列分组依据
GrByHClust按照聚簇进行散列分组
GrByHP并行散列分组依据
GrByHSets按照集进行散列分组
GrByO排序分组依据
GrByOSets按照集进行排序分组
GrByS单行分组依据
GrBySSets按照集进行分组
HF 散列过滤
HFP并行散列过滤
HTS散列表扫描
IAH交叉所有散列
IAM交叉所有合并
IH交叉散列
IM交叉合并
ININ 列表
INSENSITIVE不敏感
INSERT插入
IS

索引扫描

在简要计划中,它为 table-name 后跟 <rowID>, <seq> 或 <rowID>。在图形式计划中,它只为 table-name

ISP并行索引扫描
JE存在连接
JH散列连接
JHE存在散列连接
JHEP存在并行散列连接
JHFO完全外散列连接
JHNE不存在散列连接
JHNEP不存在并行散列连接
JHO左外散列连接
JHP并行散列连接
JHPO并行左外散列连接
JHR递归散列连接
JHRO递归左外散列连接
JM合并连接
JMFO完全外部合并连接
JMO左外部合并连接
JNL嵌套循环连接
JNLFO完全外部嵌套循环连接
JNLO左外部嵌套循环连接
KEYSET键集
LOAD装载
PC过程调用(表函数)
PreFilter预过滤器
RowID Scan

行标识符扫描

在简要计划中,它为 table-name <rowID>。在图形式计划中,它只为 table-name

ROWS行构造函数
RL行限制
RR行重复
RT递归表
RU递归联合
SELECT选择
Sort排序(索引或合并)
SrtN对前 N 个排序
TS

表扫描

在简要计划中,它为 table-name <seq>。在图形式计划中,它只为 table-name

TSP并行表扫描
UA全部联合
UPDATE更新
Window窗口
Work工作表

有关算法的说明,请参见[查询执行] 算法

计划中使用的常见统计信息

下面的统计信息是实际的测量值。

统计 解释
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 选项 [数据库]
优化负载 确定优化查询处理的目标是针对更新和读取混合进行的负载还是针对主要基于读取的负载。请参见optimization_workload 选项 [数据库]
ANSI 更新约束 控制允许的更新范围(选项包括 Off、Cursors 和 Strict)。请参见ansi_update_constraints 选项 [兼容性]
优化级别 保留。
选择列表 查询所选择的表达式的列表。
实现化视图 (Materialized View)

优化程序考虑的实现化视图 (Materialized View) 的列表。列表中的每个条目均为以下格式的元组:view-name [ view-matching-outcome ] [ table-list ],其中 view-matching-outcome 显示实现化视图 (Materialized View) 的用法;如果值为 COSTED,则说明视图已在枚举时使用。table-list 是可能已被此视图替代的查询表的列表。

view-matching-outcome 的值包括:

  • 基本表不匹配
  • 权限不匹配
  • 谓语不匹配
  • 选择列表不匹配
  • 已用开销
  • 失效不匹配
  • 快照失效不匹配
  • 无法由优化程序使用
  • 无法由优化程序在内部使用
  • 无法建立定义
  • 无法访问
  • 已禁用
  • 选项不匹配
  • 已达到视图匹配阈值
  • 使用的视图

有关阻止优化程序使用实现化视图 (Materialized View) 的限制和条件的详细信息,请参见使用实现化视图 (Materialized View) 提高性能管理实现化视图 (Materialized View) 时的限制

计划中与锁相关的项
解释
被锁定的表 所有被锁定的表及其关联的隔离级别的列表。
计划中与扫描相关的项
解释
表名 表的实际名称。
相关名 表的别名。
估计行数 表中的估计行数。
估计页数 表中的估计页数。
估计行大小 表的估计行大小。
页位置图 在使用页位置图来读取多页时为 [是]。
计划中与索引扫描相关的项
解释
索引名 索引的名称。
键类型 可以是 PRIMARY KEY(主键)、FOREIGN KEY(外键)、CONSTRAINT(唯一约束)或 UNIQUE(唯一索引)之一。如果索引是非唯一的辅助索引,则不会显示键类型。
深度 索引的高度。请参见表大小和页面大小
估计叶页数 估计的叶页数。
基数 索引的基数(如果它不同于估计行数)。这仅适用于 SQL Anywhere 数据库版本 6.0.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 的指定所返回的最大行数。

文本计划
图形式计划
访问执行计划

集合 目录 索引 窗口函数算法 下一页 PDF