sql >> データベース >  >> RDS >> Mysql

MySQLビューはどのように機能しますか?

    ビューはテーブルのように機能します 、しかしそれはテーブルではありません。それは決して存在しません。ビュー名を参照するときに実行されるのは、準備された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 ... )、オプティマイザは、条件(述語と呼ばれる)を元のクエリにプッシュする場合があります。これにより、クエリが高速化されます。



    1. node.js async/awaitをMySQLで使用する

    2. utf8_binフィールドのMYSQL大文字と小文字を区別する検索

    3. Spring MVCでサーバーに画像をアップロードし、mysqlデータベースに参照を保存する

    4. より多くのショープランの改善?はい、お願いします!