过滤器应用包括任何类型谓语、涉及子选择的比较、EXISTS 和 NOT EXISTS 子查询(以及其它形式的限定子查询)的搜索条件。搜索条件出现在语句的 WHERE 子句和 HAVING 子句中,还出现在 FROM 子句内 JOINS 的 ON 条件中。
优化程序可在其认为合适的情况下任意简化和更改搜索条件中的谓语集,并可构建访问计划,该计划按照与初始语句中指定的顺序不同的顺序来应用条件。查询重写优化可能会对计划中计算的谓语集进行大量的更改。
在许多情况下,查询中的谓语可能不会导致在访问计划中存在过滤器。例如,诸如 IndexScan 等各种算法,它们可以强制应用谓语,无需使用显式运算符。例如,请考虑涉及两个文字常量的 BETWEEN 谓语,且谓语中引用的列已建立索引。BETWEEN 谓语可以由索引扫描的上限和下限强制实施,而查询计划中将不会包含过滤器。属于连接条件的谓语通常也不会作为过滤器出现在访问计划中。
PreFilter 与过滤器基本相同,只是在 PreFilter 的谓语中所使用的表达式不依赖于查询中引用的任何表或视图。举一个简单的例子,WHERE 1 = 2
子句中的搜索条件即可作为一个预过滤器进行计算。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |