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

 

オプティマイザの仕組み

オプティマイザの役割は、SQL 文を実行する効率的な方法を考案することです。これを行うには、オプティマイザは、クエリの実行プランを判断する必要があります。これには、クエリで参照されるテーブルのアクセス順序、各テーブルに使用されるジョイン演算子とアクセス方式、クエリの各部分の計算でクエリで参照されないマテリアライズド・ビューを使用できるかどうかなどの判断が含まれます。オプティマイザは、クエリで可能なアクセス・プランを生成してコストを計算するときに、ジョイン列挙フェーズ中にクエリを実行するための最適なアクセス・プランを選択します。最適なアクセス・プランでは、オプティマイザの推測値が最短時間と最低コストで望ましい結果セットを返します。オプティマイザは、ディスクへの必要な読み書き回数を推定して列挙された各方式のコストを決定します。

Interactive SQL では、[結果] ウィンドウ枠の [プラン] タブをクリックして、クエリの実行に使用される最適なアクセス・プランを表示できます。表示される詳細の程度を変更するには、([ツール] メニューから) [オプション] ウィンドウを開いて、[プラン] タブの設定を変更します。グラフィカルなプランの解釈実行プランの解釈を参照してください。

最初のローを返すコストの最小化

オプティマイザは、汎用的なディスク・アクセス・コスト・モデルを使用して、データベース・ファイルに対するランダム検索と逐次検索の相対的なパフォーマンスの差異を認識します。ALTER DATABASE 文を使用すると、データベースを特定のハードウェア構成に対応させることができます。ALTER DATABASE 文を参照してください。

デフォルトでは、クエリ処理はすべての結果セットを返すように最適化されています。optimization_goal オプションを使用してデフォルトの動作を変更すると、最初のローを迅速に返すコストを最小限に抑えることができます。このオプションを First-row に設定すると、オプティマイザは、クエリの結果の最初のローをフェッチするまでの時間を短縮するアクセス・プランを選択します。この場合、検索にかかる合計時間は長くなることがあります。optimization_goal オプション [データベース]を参照してください。

セマンティック上等しい構文の使用

ほとんどのコマンドは、SQL 言語を使用してさまざまな方法で表すことができます。これらの表現は、同じタスクを実行するという点でセマンティック上は同等ですが、構文はまったく異なる場合があります。ごくわずかな例外はありますが、オプティマイザは、各文のセマンティックだけに基づいて適切なアクセス・プランを考案します。

構文の違いは重要に見えるかもしれませんが、通常はまったく影響ありません。たとえば、クエリ構文で述部、テーブル、属性の順序が違ってもアクセス・プランの選択には影響しません。クエリに非マテリアライズド・ビューが含まれているかどうかによってオプティマイザが影響を受けることもありません。

オプティマイザ・クエリのコスト削減

オプティマイザが実現可能な最も効率の良いアクセス・プランを見つけるのが理想的ですが、通常、これは現実的ではありません。複雑なクエリの場合、さまざまな可能性が存在することがあります。

オプティマイザは効率的ですが、各オプションの分析には、時間とリソースを必要とします。オプティマイザは、これから行う最適化のコストと、これまでに見つけた最高のプランの実行にかかるコストを比較します。相対的にコストの低いプランが考案されると、オプティマイザは停止し、そのプランの実行を進めます。さらに最適化を行うと、すでに見つかっているアクセス・プランを実行する場合よりも多くのリソースを消費する可能性があります。optimization_level オプションの値を高く設定することで、オプティマイザが費やす作業量を指定できます。optimization_level オプション [データベース]を参照してください。

コストがかかる複雑なクエリの場合や、高い最適化レベルを設定した場合、オプティマイザの動作時間が長くなります。非常に大きなコストがかかるクエリの場合は、はっきりとした遅延が生じるほどクエリの実行時間が長くなることがあります。


オプティマイザの推定とカラム統計
パフォーマンスの自動チューニング
オプティマイザの基本となる仮定条件
クエリでの述部の使用
MIN 関数と MAX 関数を使用したコスト・ベースの最適化
プランのキャッシュ