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 の使用法 » クエリ処理 » クエリの最適化と実行 » クエリ処理のフェーズ

 

クエリ処理のフェーズをスキップするための条件

ほぼすべての文が、すべてのクエリ処理のフェーズを経由します。ただし、例外が主に 2 つあります。「プランのキャッシュ」の恩恵を受けるクエリ (データベース・サーバによってプランがキャッシュ済みのクエリ) と「バイパス・クエリ」です。

  • プランのキャッシュ   ストアド・プロシージャまたはユーザ定義関数内のクエリの場合、データベース・サーバは再利用できるように実行プランをキャッシュします。このクラスのクエリの場合、クエリ実行プランは実行後にキャッシュされます。次回クエリが実行されると、プランが取得され、実行フェーズまでのすべてのフェーズがスキップされます。プランのキャッシュを参照してください。

  • バイパス・クエリ   バイパス・クエリは、データベース・サーバがオプティマイザをバイパスできると認識する特定の特性を持った、単純なクエリのサブクラスです。最適化をバイパスすることで、実行プランの構築時間を削減できます。

    クエリがバイパス・クエリとして認識されると、コストベースの最適化ではなくヒューリスティックが使用されます。つまり、セマンティック変形と最適化のフェーズはスキップされ、クエリの実行プランはクエリの解析ツリー表現から直接構築されます。

単純なクエリ

単純なクエリとは、次の特性を持った単一クエリ・ブロックの SELECT 文、INSERT 文、DELETE 文、UPDATE 文です。

  • クエリ・ブロックに、サブクエリ、UNION や EXCEPT などの追加クエリ・ブロック、および共通テーブル式が含まれていない。

  • クエリ・ブロックが 1 つのベース・テーブルまたはマテリアライズド・ビューを参照する。

  • クエリ・ブロックには、TOP N 句、FIRST 句、ORDER BY 句、DISTINCT 句を含めることができる。

  • クエリ・ブロックには、GROUP BY 句や HAVING 句を含まない集合関数を含めることができる。

  • クエリ・ブロックに、Window 関数が含まれていない。

  • クエリ・ブロック式に、NUMBER、IDENTITY、サブクエリが含まれていない。

  • ベース・テーブルに定義された制約が単純な式である。

セマンティック変形フェーズで、複雑な文は単純な文に変形される場合があります。単純な文に変形されると、クエリをオプティマイザ・バイパスで処理したり、SQL Anywhere サーバでクエリ・プランをキャッシュできます。

最適化の実行と最適化の非実行の強制

プランのキャッシュまたはオプティマイザのバイパスの条件を満たすクエリは、SQL Anywhere オプティマイザでの処理を強制できます。これには、任意の SQL 文で FORCE OPTIMIZATION 句を使用します。

また、文がオプティマイザをバイパスするように強制することもできます。これには、文の FORCE NO OPTIMIZATION 句を使用します。データベース・オプションの設定またはスキーマやクエリの特性などが原因で、文が複雑すぎてオプティマイザをバイパスできない場合、クエリは失敗し、エラーが返されます。

FORCE OPTIMIZATION 句と FORCE NO OPTIMIZATION 句は、次の文の OPTION 句で使用できます。