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 的用法 » 查询处理 » 查询优化与执行 » [查询执行] 算法

 

访问计划中的关系代数运算符

访问计划包括一个由关系代数运算符所组成的树,这些运算符从树叶开始,它们使用查询的基本输入(通常为表中的各行)并自下而上对各行进行处理,以便树根生成最终结果。为便于理解,可查看图形形式的访问计划。请参见读取执行计划读取图形式计划

SQL Anywhere 支持这些不同关系代数运算符的多种实现。例如,SQL Anywhere 支持三种不同的内连接实现:嵌套循环连接、合并连接和散列连接。其中的每个运算符在特定环境中都有其各自的优点。查询优化程序会对一些参数进行分析以做出选择,这些参数包括高速缓存中表数据的数量、连接谓语的特征及选择性、输入到连接的顺序以及从中输出的顺序、可用于执行连接的内存量以及各种其它因素。

SQL Anywhere 在执行时可动态地从优化程序所选择的物理代数运算符切换到在逻辑上与初始运算符等效的另一不同物理算法。通常,此替代访问计划用于以下两种环境之一:

  • 当用于执行语句的总内存量接近于内存调控器阈值时,则切换到一个可能执行得更慢、但却可以释放大量内存以供其它运算符(或其它请求)使用的策略。当这种情况发生时,QueryLowMemoryStrategy 属性将递增。此信息还出现在语句的图形式计划中。有关 QueryLowMemoryStrategy 属性的信息,请参见连接属性

    运算符可以使用的内存量取决于服务器的进程并发水平和活动连接数。

    有关内存调控器和进程并发水平的详细信息,请参见:

  • 如果在其执行开始时,特定运算符(例如,散列内连接)确定其输入与优化程序在优化时计算出的预期的基数不同。在这种情况下,运算符可能会切换到执行开销较小的不同策略。通常,此替代策略会使用索引嵌套循环处理。对于散列连接,QueryJHToJNLOptUsed 属性会在此切换发生时递增。在语句的图形式计划中也会出现连接方法切换。有关 QueryJHToJNLOptUsed 属性的信息,请参见连接属性