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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询处理 » 查询优化与执行 » 优化程序的工作原理

 

MIN 和 MAX 函数基于开销的优化

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> ] ]