web-dev-qa-db-ja.com

MYSQLビューは物理的なスペースを占有しますか?

mYSQLビューは物理的なスペースを占有しますか?または言い換えると、MYSQLデータベースは特定の数のビューに制限されていますか?

5
Vickel

あなたの質問に文字通り答えるために、はい、MySQLでは、ビューはディスク上の占有スペースとして存在します。しかし、もちろんそうします。そうしなかった場合、どこに存在しますか?サーバーを再起動した場合、ビューはどのように持続しますか?

あなたが本当に意味したことは、「MySQLビューは、それらが含む行の数に比例して物理スペースを占有しますかか?」であると想像します。

MySQLでは、よく:

ビューは、呼び出されたときに結果セットを生成する保存されたクエリです。ビューは仮想テーブルとして機能します。

保存されるのは結果ではなくクエリです。

ビュー処理アルゴリズム に関するマニュアルのセクションは、これにさらに光を当てています:ビューを処理する通常の方法は、ビューの定義がビューを参照するクエリにインライン化されることです(これはMERGEアルゴリズムと呼ばれます) )。場合によっては、ビューのクエリが単独で実行され、結果が一時テーブルに格納され、参照クエリが実行される別の方法が使用されます(これはTEMPTABLEアルゴリズムと呼ばれます)。

MERGEアルゴリズムでは、ビューの結果をディスクに保存する必要はありません。 TEMPTABLEアルゴリズムは、一時的ですが、そうします。

ビューは他のデータベースでも同じように機能します。これは、たとえば PostgreSQLでの動作 です。

ただし、一部のデータベースでは、マテリアライズドビューという別のアプローチもサポートしています。これらにより、ビューのクエリは事前に実行され、結果はディスクに保存されます。マテリアライズドビュービューは実際に、ビューに含まれる行数に比例して物理スペースを占有します。これはより多くのスペースを消費し、事前に作業を行う必要があり、ビューが最新であることを確認するために多くの複雑さ(ユーザーとデータベースによってさまざまな範囲で共有されます)を導入しますが、クエリがはるかに高速になる可能性があります、ビューのクエリに関連する作業がすでに行われているためです。 オラクルはマテリアライズドビューをサポートしています 、そして長い間そうです。現在のところPostgreSQLはサポートしていませんが、 次のバージョン以降 (9.3になります)。マテリアライズドビューのサポートが組み込まれていないデータベースでは、トリガーを使用してそれらをエミュレートする方法があります。

11
Tom Anderson

非常に興味深い質問!!クエリは、ビューから選択しているときにMySQLで再実行され、実行時に副選択と見なされるためです。私はPostgreSQLがこれを異なる方法で処理すると信じていますが、私の答えは「いいえ」です。実際のビューを構築するクエリを格納するために必要なデータ以外に、ディスク容量を消費しません

4
Bryan Moyles