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

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

 

语义查询转换

为了高效运行,SQL Anywhere 将查询重写为在语义上等效但在语法上不同的形式。SQL Anywhere 可执行许多不同的重写操作。

如果读取访问计划,则经常会发现其并不对应于初始语句的文字解释。例如,为使 SQL 语句更加有效,优化程序会尽可能多地尝试用连接重写子查询。

在查询重写阶段,SQL Anywhere 会执行多个转换以搜索更高效和更方便的查询表示。由于查询可能被重写为语义上等效的查询,则计划看起来可能会与初始查询的文字解释有很大不同。常见的操作包括:

  • 排除不必要的 DISTINCT 条件

  • 取消子查询嵌套

  • 将谓语推入执行了 UNION 或 GROUP 的视图和派生表中

  • 优化 OR 和 IN 列表谓语

  • 优化 LIKE 谓语

  • 将外连接转换为内连接

  • 排除外连接和内连接

  • 通过谓语推导发现可利用的条件

  • 排除不必要的大小写转换

  • 将子查询重写为 EXISTS 谓语

注意

如果游标是可更新的,则不能对主查询块执行某些查询重写优化。将游标声明为只读以利用优化。请参见选择游标类型DECLARE CURSOR 语句 [ESQL] [SP]

有关在主查询块是可更新游标时不能执行的优化的示例,请参见排除不必要的内连接和外连接

一些在查询重写阶段执行的重写优化可以在由 REWRITE 函数返回的结果中观察到。请参见REWRITE 函数 [Miscellaneous]

 示例

排除不必要的 DISTINCT 条件
取消子查询嵌套
将谓语推入执行了 UNION 或 GROUP 的视图和派生表中
优化 OR 和 IN 列表谓语
优化 LIKE 谓语
将外连接转换为内连接
排除不必要的内连接和外连接
通过谓语推导发现可利用的条件
排除不必要的大小写转换
将子查询重写为 EXISTS 谓语
内置用户定义的函数
内置简单的系统过程