mYSQLビューは物理的なスペースを占有しますか?または言い換えると、MYSQLデータベースは特定の数のビューに制限されていますか?
あなたの質問に文字通り答えるために、はい、MySQLでは、ビューはディスク上の占有スペースとして存在します。しかし、もちろんそうします。そうしなかった場合、どこに存在しますか?サーバーを再起動した場合、ビューはどのように持続しますか?
あなたが本当に意味したことは、「MySQLビューは、それらが含む行の数に比例して物理スペースを占有しますかか?」であると想像します。
MySQLでは、よく:
保存されるのは結果ではなくクエリです。
ビュー処理アルゴリズム に関するマニュアルのセクションは、これにさらに光を当てています:ビューを処理する通常の方法は、ビューの定義がビューを参照するクエリにインライン化されることです(これはMERGE
アルゴリズムと呼ばれます) )。場合によっては、ビューのクエリが単独で実行され、結果が一時テーブルに格納され、参照クエリが実行される別の方法が使用されます(これはTEMPTABLE
アルゴリズムと呼ばれます)。
MERGE
アルゴリズムでは、ビューの結果をディスクに保存する必要はありません。 TEMPTABLE
アルゴリズムは、一時的ですが、そうします。
ビューは他のデータベースでも同じように機能します。これは、たとえば PostgreSQLでの動作 です。
ただし、一部のデータベースでは、マテリアライズドビューという別のアプローチもサポートしています。これらにより、ビューのクエリは事前に実行され、結果はディスクに保存されます。マテリアライズドビュービューは実際に、ビューに含まれる行数に比例して物理スペースを占有します。これはより多くのスペースを消費し、事前に作業を行う必要があり、ビューが最新であることを確認するために多くの複雑さ(ユーザーとデータベースによってさまざまな範囲で共有されます)を導入しますが、クエリがはるかに高速になる可能性があります、ビューのクエリに関連する作業がすでに行われているためです。 オラクルはマテリアライズドビューをサポートしています 、そして長い間そうです。現在のところPostgreSQLはサポートしていませんが、 次のバージョン以降 (9.3になります)。マテリアライズドビューのサポートが組み込まれていないデータベースでは、トリガーを使用してそれらをエミュレートする方法があります。
非常に興味深い質問!!クエリは、ビューから選択しているときにMySQLで再実行され、実行時に副選択と見なされるためです。私はPostgreSQLがこれを異なる方法で処理すると信じていますが、私の答えは「いいえ」です。実際のビューを構築するクエリを格納するために必要なデータ以外に、ディスク容量を消費しません