为了高效运行,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 谓语
内置用户定义的函数
内置简单的系统过程
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |