ビューはテーブルのように機能します 、しかしそれはテーブルではありません。それは決して存在しません。ビュー名を参照するときに実行されるのは、準備されたSQLステートメントのみです。 IE:
CREATE VIEW foo AS
SELECT * FROM bar
SELECT * FROM foo
...実行するのと同じです:
SELECT x.*
FROM (SELECT * FROM bar) x
MySQLDumpには、ビューに挿入される行が含まれることはありません...
悲しいことに、それは(疑わしいとはいえ)設計によるものです。 MySQLビューには多くの制限があり、それらは文書化されています。 http: //dev.mysql.com/doc/refman/5.0/en/create-view.html
それで、それが単なる架空のテーブル/プリペアドステートメントである場合、それは理論的には通常のテーブル/クエリと同じ(またはそれ以下)のパフォーマンスを持っていることを意味しますか?
いいえ。
テーブルにはインデックスを関連付けることができます。これにより、データの取得が高速化されます(挿入/更新にはある程度のコストがかかります)。一部のデータベースは「マテリアライズド」ビューをサポートしています。これは、インデックスを適用できるビューです。これは、MySQLがサポートしていないことは驚くべきことではありません。 限られたビュー機能を考えると(これはv5 IIRCでのみ開始され、ゲームの非常に遅い時期です)。
ビューは派生テーブルであるため、ビューのパフォーマンスは、それが構築されているクエリと同じくらい良好です。そのクエリがうまくいかない場合、パフォーマンスの問題は雪だるま式になります...とはいえ、ビューをクエリするとき-WHERE句のビュー列参照が関数でラップされていない場合(IE:WHERE v.column LIKE ...
、ない WHERE LOWER(t.column) LIKE ...
)、オプティマイザは、条件(述語と呼ばれる)を元のクエリにプッシュする場合があります。これにより、クエリが高速化されます。