为了提高运行效率,Adaptive Server Anywhere 通常会将查询重写为新的形式(可能分为几个步骤)。它将确保以新的方式表示查询的新版本仍会计算出相同的结果。也就是说,Adaptive Server Anywhere 将查询重写为在语义上等效但在语法上不同的形式。
Adaptive Server Anywhere 可以执行大量不同的重写操作。如果您读取访问计划,则经常会发现访问计划并不对应于初始语句的文字解释。例如,优化程序会尽可能多地用连接重写子查询。优化程序可以自由地重写 SQL 语句这一事实以及它重写 SQL 语句的某些方式对您来说都很重要。
与 SQL 语言定义不同,一些语言会对 AND 和 OR 运算强制严格的行为。一些语言可确保将首先对左侧条件求值。如果可以确定整个条件为真,编译器将确保将不会对右侧条件求值。
这样,您就可以将那些在其它情况下需要两个嵌套 IF 语句的条件组合成一个条件。例如,在 C 语言中,您可以按如下方式在使用指针之前测试该指针是否为 NULL。您可以将嵌套条件
if ( X != NULL ) {
if ( X->var != 0 ) {
... statements ...
}
}替换为更为精简的表达式
if ( X != NULL && X->var != 0 ) {
... statements ...
}与 C 语言不同,SQL 语言在执行顺序方面没有的这样规则。Adaptive Server Anywhere 可以根据需要自由地重新排列这些条件的顺序。由于 SQL 语言规范不区分重新排序后的形式,这些形式在语义上是等效的。特别是,查询优化程序可以任意地将 WHERE、HAVING 和 ON 子句中的谓语重新排序。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。