SQLエンジンがSQLリクエストを受信してから実行するまでの典型的なプロセスは、以下の図のとおりです:

次の表は、SQLリクエストの実行プロセスの手順を説明したものです。
手順 |
説明 |
|---|---|
| クイックパラメータ化モジュール | クイックパラメータ化モジュールは、SQL内の定数をパラメータに変換し、その後パラメータ化されたSQLテキストをキーとしてPlanCacheから実行計画を取得します。これにより、パラメータが異なるSQLでも同じ計画を共有できるようになります。 |
| 実行計画キャッシュモジュール(Plan Cache) | 実行計画キャッシュモジュールは、SQLが初めて生成した実行計画をメモリにキャッシュし、以降の実行ではこの計画を繰り返し実行することができます。これにより、重複するクエリの最適化処理を回避できます。 |
| 構文解析モジュール(Parser) | ユーザーから送信されたSQLリクエスト文字列を受信すると、構文解析モジュールは文字列を「単語」に分割し、事前に設定された文法ルールに基づいてリクエスト全体を解析します。これにより、SQLリクエスト文字列は構文構造情報を持つメモリデータ構造、すなわち構文木(Syntax Tree)に変換されます。 |
| セマンティック解析モジュール(Resolver) | Resolverは、生成された構文木をデータベースのセマンティック情報を持つ内部データ構造に変換します。このプロセスでは、Resolverはデータベースのメタ情報に基づいてSQLリクエスト内のトークンを対応するオブジェクト(例:データベース、テーブル、列、インデックスなど)に翻訳し、生成されたデータ構造をStatement Treeと呼びます。 |
| クエリリライト(Query Rewrite) | クエリリライトとは、あるSQLをより最適化しやすい別のSQLに書き換えることです。 |
| 最適化エンジン(Optimizer) | 最適化エンジンは、SQLリクエストの最適化の核心であり、SQLリクエストに対して最適な実行計画を生成する役割を果たします。最適化プロセスでは、最適化エンジンはSQLリクエストのセマンティクス、オブジェクトデータの特性、オブジェクトの物理的配置など、多岐にわたる要素を総合的に考慮し、アクセスパスの選択、結合順序の選択、結合アルゴリズムの選択、分散計画の生成など、複数の核心的な問題を解決し、最終的にそのSQLに対応する最適な実行計画を選択します。 |
| コードジェネレーター(Code Generator) | 実行計画を実行可能なコードに変換しますが、最適化の選択は行いません。 |