SQL ステートメントの処理

SQL をプログラムで使用する手法について説明する前に、SQL ステートメントの処理方法について説明する必要があります。 関連する手順は、3 つの手法すべてに共通していますが、各手法では異なる時間に実行されます。 次の図は、SQL ステートメントの処理に関連する手順を示しています。これについては、このセクションの残りの部分で説明します。

Steps for processing an SQL statement

SQL ステートメントを処理するために、DBMS は次の 5 つの手順を実行します。

  1. DBMS は最初に SQL ステートメントを解析します。 ステートメントをトークンと呼ばれる個々の単語に分割し、ステートメントに有効な動詞と有効な句があることを確認します。 この手順では、構文エラーとスペル ミスを検出できます。

  2. DBMS はステートメントを検証します。 ステートメントを、システム カタログに対してチェックします。 ステートメントで指定されたすべてのテーブルがデータベースに存在しますか? すべての列が存在し、列名は明確ですか? ユーザーはステートメントを実行するために必要な特権を持っていますか? この手順では、特定のセマンティック エラーを検出できます。

  3. DBMS によって、ステートメントのアクセス プランが生成されます。 アクセス プランは、ステートメントを実行するために必要なステップのバイナリ表現です。これは、実行可能コードと同等の DBMS です。

  4. DBMS によってアクセス プランが最適化されます。 アクセス プランを実行するさまざまな方法について調べます。 インデックスを使用して検索を高速化できますか? DBMS は最初にテーブル A に検索条件を適用してからテーブル B に結合するか、結合から始めて後で検索条件を使用する必要がありますか? テーブル内の順次検索を回避したり、テーブルのサブセットに減らしたりすることはできますか? 代替手段を探索した後、DBMS はそのうちの 1 つを選択します。

  5. DBMS は、アクセス プランを実行してステートメントを実行します。

SQL ステートメントの処理に使用される手順は、必要なデータベース アクセスの量と、必要な時間によって異なります。 SQL ステートメントの解析にはデータベースへのアクセスは必要なく、非常に迅速に実行できます。 一方、最適化は非常に CPU 負荷の高いプロセスであり、システム カタログへのアクセスが必要です。 複雑で複数のテーブルを持つクエリの場合、オプティマイザーは同じクエリを実行するさまざまな方法を何千も探索する場合があります。 ただし、通常、クエリを非効率的に実行するコストは非常に高いため、最適化に費やされる時間は、クエリの実行速度の向上に取り戻されるよりも多くなります。 これは、同じ最適化されたアクセス プランを繰り返し使用して繰り返しクエリを実行できる場合にさらに重要になります。