Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询处理 » 查询优化与执行

 

查询处理阶段

本节介绍一个语句从标注阶段开始到其执行结束所要经过的各阶段。还将介绍作为优化程序设计基础的假定,并讨论选择性估计、开销估计以及查询处理的步骤。

没有结果集的语句(如 UPDATE 或 DELETE 语句)会经历查询处理阶段。

  • 标注阶段   当数据库服务器收到一个查询时,它将使用分析器对该语句进行分析,然后将其转换为查询的代数表示形式,也称为分析树。在此阶段,分析树用于语义和语法检查(例如,校验查询中所引用的对象是否存在于目录中)、权限检查、使用定义的参照约束进行 KEY JOIN 和 NATURAL JOIN 转换以及进行非实例化视图扩展。此阶段的输出为一个分析树形式的重写查询,其中包含对初始查询中所引用的所有对象的标注。

  • 语义转换阶段   在此阶段中,查询将进行迭代语义转换。虽然查询仍以加标注的分析树的形式表示,但在此阶段将应用诸如连接排除、DISTINCT 排除和谓语规范化等重写优化。此阶段中的语义转换根据语义转换规则执行,这些规则启发式地应用于分析树表示。请参见语义查询转换

    包含已由数据库服务器高速缓存的计划的查询将跳过此查询处理阶段。简单语句也可以跳过此查询处理阶段。例如,在语义转换阶段,不会对许多在优化程序跳过中采用启发式计划选择的语句进行处理。SQL 语句的复杂性确定是否对语句应用此阶段。请参见计划高速缓存跳过查询处理阶段的资格

  • 优化阶段   优化阶段使用查询的另一种内部表示形式,即查询优化结构,此结构通过分析树构建。请参见优化程序的工作原理

    包含已由数据库服务器高速缓存的计划的查询将跳过此查询处理阶段。此外,简单语句也可以跳过此查询处理阶段。请参见计划高速缓存跳过查询处理阶段的资格

    此阶段分为两个子阶段:

    • 预优化阶段   预优化阶段将使用稍后在枚举阶段中所需的信息完成优化结构。在此阶段,将对查询进行分析,以查找在查询访问计划中可能使用的所有相关索引和实例化视图。例如,在此阶段,视图匹配算法将确定可能用于满足全部或部分查询的所有实例化视图。此外,优化程序会基于查询谓语分析建立可能用于枚举阶段的替代连接方法,以连接查询的表。在此阶段中,并不会为查询确定最佳的访问计划;此阶段的目的是为枚举阶段做准备。

    • 枚举阶段   在此阶段中,优化程序使用预优化阶段中生成的构件块为查询枚举可能的访问计划。搜索空间非常大,优化程序将使用专有的枚举算法来生成和修整已生成的访问计划。会对每个计划的开销估计进行计算,以用于将当前计划与目前得到的最佳计划进行比较。在进行这些比较的过程中,高开销计划将被放弃。进行开销估计时会考虑资源利用问题,例如,磁盘和 CPU 操作、预计的中间结果的行数、优化目标、高速缓存大小等等。枚举阶段的输出即为查询的最佳访问计划。

  • 计划构建阶段   计划构建阶段将利用最佳访问计划并构建用于执行查询的查询执行计划的相应最终表示形式。可以在 Interactive SQL 的 [计划查看器] 中看到图形版本的计划。图形式计划具有树形结构,其中每个节点为一个实现特定关系代数操作的物理运算符,例如,[散列连接] 和 [排序分组依据] 分别为实现连接操作和分组依据操作的物理运算符。请参见读取图形式计划

    包含已由数据库服务器高速缓存的计划的查询将跳过此查询处理阶段。请参见计划高速缓存跳过查询处理阶段的资格

  • 执行阶段   使用在计划构建阶段中构建的查询执行计划计算查询的结果。


跳过查询处理阶段的资格