ほぼすべての文が、すべてのクエリ処理のフェーズを経由します。ただし、例外が主に 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 句で使用できます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |