MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

25.5.2 ビュー処理アルゴリズム

CREATE VIEW または ALTER VIEW のオプションの ALGORITHM 句は、標準 SQL に対する MySQL 拡張です。 これは、MySQL によるビューの処理方法に影響を与えます。 ALGORITHM は、MERGETEMPTABLE、または UNDEFINED の 3 つの値を受け取ります。

TEMPTABLE を明示的に指定する理由は、一時テーブルの作成後、ステートメントの処理を終了するために使用する前に、基礎となるテーブルでロックを解放できるためです。 その結果、MERGE アルゴリズムよりもすみやかにロックが解除され、ビューを使用するほかのクライアントが長時間ブロックされることがなくなります。

次の 3 つの理由によって、ビューアルゴリズムをUNDEFINED にできます。

前述のように、MERGE は、ビュー定義の対応する部分を、ビューを参照するステートメントにマージして処理されます。 次の例で、MERGE アルゴリズムの動作について簡単に説明します。 例では、次の定義を含むビュー v_merge が存在していると想定します。

CREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS
SELECT c1, c2 FROM t WHERE c3 > 100;

例 1: 次のステートメントを発行するとします。

SELECT * FROM v_merge;

MySQL は次のようにステートメントを処理します。

結果が実行されるステートメントは次のようになります。

SELECT c1, c2 FROM t WHERE c3 > 100;

例 2: 次のステートメントを発行するとします。

SELECT * FROM v_merge WHERE vc1 < 100;

このステートメントは、前述のステートメントと同様に処理されますが、vc1 < 100c1 < 100 になり、AND 連結詞を使用してビュー WHERE 句がステートメント WHERE 句に追加される点が異なります (また、句の一部が確実に正しい優先順位で実行されるように、かっこが追加されます)。 結果が実行されるステートメントは次のようになります。

SELECT c1, c2 FROM t WHERE (c3 > 100) AND (c1 < 100);

事実上、実行されるステートメントには、次の形式の WHERE 句が含まれます。

WHERE (select WHERE) AND (view WHERE)

MERGE アルゴリズムを使用できない場合、一時テーブルを代わりに使用する必要があります。 マージを防止する構成要素は、導出テーブルおよび共通テーブル式でのマージを防止する構成要素と同じです。 例として、サブクエリー内の SELECT DISTINCT または LIMIT があります。 詳細は、セクション8.2.2.4「マージまたは実体化を使用した導出テーブル、ビュー参照および共通テーブル式の最適化」を参照してください。