私は、多くの結合(実際には8)を使用する複雑なクエリを持っています。私はそれを視点に単純化することを考えていました。ちょっとした研究の後、私はシンプルさとセキュリティの利点を見ることができます。しかし、スピードについては何も言及していませんでした。MySQLのビューは通常のクエリより高速ですか?
ビューは、プリコンパイルされたプリペアドステートメントのように機能しますか?ビューを使用することによるパフォーマンスの向上はありますか?
私は、多くの結合(実際には8)を使用する複雑なクエリを持っています。私はそれを視点に単純化することを考えていました。ちょっとした研究の後、私はシンプルさとセキュリティの利点を見ることができます。しかし、スピードについては何も言及していませんでした。MySQLのビューは通常のクエリより高速ですか?
ビューは、プリコンパイルされたプリペアドステートメントのように機能しますか?ビューを使用することによるパフォーマンスの向上はありますか?
いいえ、ビューは単に格納されたテキストクエリです。 WHERE
とORDER
をそれに対して適用することができます。実行計画は、これらの句を考慮して計算されます。
時には助けになることもありますが、それは銀色の弾丸ではありません。私はビューのヘルプのパフォーマンスを見てきましたが、私はそれがそれを傷つけるのを見たことがあります。ビューはマテリアライゼーションを強制する可能性があります.MySQLが良いものを選択していない場合、より良いアクセスパスを得ることがあります。
ビューは基本的にストアドサブクエリです。ビューを除く
SELECT *
FROM someview
と
SELECT *
FROM (
SELECT somestuff
FROM underlying table
);
あなたが基になるクエリにあなたがどんなデータを操作するたびに書き出す必要がないよう、もう少しポータブルです:間に違いは基本的にありませんそれが返されます。
一部のデータベースでは、ビューの事前コンパイルが行われますが、MySQLがそうなるとは思われません。この質問を見ることができます:http://stackoverflow.com/questions/1021319/how-to-optimize-mysql-views –
答えに反して - 私の経験では、多くの結合を持つビューのために、直接クエリはより速く実行されます。 –