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) が 1 つだけ指定されている

この最適化の例として、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> ] ]