MIN/MAX 基于开销的优化旨在利用现有索引有效地计算包括 MAX 或 MIN 集合函数的简单集合查询的结果。这种优化的目标是,能够以利用索引只检索出少数几行的方式计算出结果。若要成为这种优化的候选对象,查询必须满足以下条件:
不能包含 GROUP BY 子句
必须位于单个表上
查询的 SELECT 列表中只能包含一个集合函数(MAX 或 MIN)
为了说明此优化,假定 SalesOrderItems 表中存在名为 prod_qty (ShipDate ASC, Quantity ASC) 的索引。因此,以下查询
SELECT MIN( Quantity ) FROM SalesOrderItems WHERE ShipDate = '2000-03-25'; |
会被在内部重写为
SELECT MAX( Quantity ) FROM ( SELECT FIRST Quantity FROM SalesOrderItems WHERE ShipDate = '2000-03-25' AND Quantity IS NOT NULL ORDER BY ShipDate ASC, Quantity ASC ) AS s(Quantity); |
在应用这种优化时,可能不会为集合查询生成 NULL_VALUE_ELIMINATED 警告。
重写后的查询的执行计划(简单形式)为:
GrByS[ RL[ SalesOrderItems<prod_qty> ] ] |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |