ビューを使用して MySQL 埋め込みクエリを最適化しようとしていますが、効果があるかどうかはわかりません。
SELECT id FROM (SELECT * FROM t);
私はそれを次のように変換したい:
CREATE VIEW v AS SELECT * FROM t;
SELECT id FROM v;
SQL Server の「インデックス付きビュー」については聞いたことがありますが、MySQL についてはよくわかりません。どんな助けでも大歓迎です。ありがとう!
ビューを使用して MySQL 埋め込みクエリを最適化しようとしていますが、効果があるかどうかはわかりません。
SELECT id FROM (SELECT * FROM t);
私はそれを次のように変換したい:
CREATE VIEW v AS SELECT * FROM t;
SELECT id FROM v;
SQL Server の「インデックス付きビュー」については聞いたことがありますが、MySQL についてはよくわかりません。どんな助けでも大歓迎です。ありがとう!
SQL Server のインデックス付きビューは一般に「マテリアライズド ビュー」と呼ばれますが、MySQL ではサポートされていません。MySQL の VIEW サポートは、他のベンダーと比較してかなり制限されています。制限については、ドキュメントに記載されています。
通常のビューは、準備された SQL ステートメントにすぎません。提供した 2 つの例を使用することに違いはありません。場合によっては、ビューから選択するときの WHERE 句がオプティマイザーによって VIEW クエリにプッシュされることがありますが、それは完全に制御できません。
ビューの方が速いかもしれません (おそらくそうです) が、テストしてみませんか? または、両方のクエリに対して EXPLAIN を実行して、それらがどのように実行されるかを確認しますか?
ほぼ同じです。高速かどうかは、インデックスに依存します。
MySQL はクエリ結果をキャッシュするため、クエリが実行間で同じであり、基になるデータセットが同じである限り (新しいレコードが追加されていない場合)、次のクエリ実行時にキャッシュされた結果が返されます。
ビューを取得するたびに select ステートメントが実行されます。
ビューの動作は少し異なります。ビューの作成を参照してください