2011-01-25 15 views
23

私は、多くの結合(実際には8)を使用する複雑なクエリを持っています。私はそれを視点に単純化することを考えていました。ちょっとした研究の後、私はシンプルさとセキュリティの利点を見ることができます。しかし、スピードについては何も言及していませんでした。MySQLのビューは通常のクエリより高速ですか?

ビューは、プリコンパイルされたプリペアドステートメントのように機能しますか?ビューを使用することによるパフォーマンスの向上はありますか?

+2

一部のデータベースでは、ビューの事前コンパイルが行われますが、MySQLがそうなるとは思われません。この質問を見ることができます:http://stackoverflow.com/questions/1021319/how-to-optimize-mysql-views –

+0

答えに反して - 私の経験では、多くの結合を持つビューのために、直接クエリはより速く実行されます。 –

答えて

13

いいえ、ビューは単に格納されたテキストクエリです。 WHEREORDERをそれに対して適用することができます。実行計画は、これらの句を考慮して計算されます。

+4

これは厳密には当てはまりません。ビューのアルゴリズムにマージを選択した場合、基本的には正しいですが、誘惑を選択した場合はマテリアライズされます。未定義(デフォルトでは未定義の場合)は、MySQLが選択できます。 – Ray

+0

私はMySQLの専門家ではありませんが、結果が要求されたときにMySQLがビューをどのように処理するかをTempTableアルゴリズムが制御し、ビューの格納方法に全く影響しないことは間違いありません。 –

+0

はい、それはちょうど臨時の質問であるかのように実行されるテキストを持つこととは全く異なります。 – Ray

0

時には助けになることもありますが、それは銀色の弾丸ではありません。私はビューのヘルプのパフォーマンスを見てきましたが、私はそれがそれを傷つけるのを見たことがあります。ビューはマテリアライゼーションを強制する可能性があります.MySQLが良いものを選択していない場合、より良いアクセスパスを得ることがあります。

+0

MySQLはマテリアライズドビューをサポートしていません。だから私はそれが等価のクエリよりもパフォーマンスにどのように役立つかを見逃しています... – ircmaxell

+0

彼らはそれをマテリアライズドビューとは呼んでいませんが、 "temptable"は名前が示すようにおおよそのビューアルゴリズムの1つです – Ray

+1

これと魅力的なアルゴリズムは、マテリアライズド・ビューのバージョンではありません。これまでMySQLにはマテリアライズド・ビューや事前解決されたビューの形式はサポートされていません(手動でビューをテーブルに定期的に投影しない限り)。 –

0

ビューは基本的にストアドサブクエリです。ビューを除く

SELECT * 
FROM someview 

SELECT * 
FROM (
    SELECT somestuff 
    FROM underlying table 
); 

あなたが基になるクエリにあなたがどんなデータを操作するたびに書き出す必要がないよう、もう少しポータブルです:間に違いは基本的にありませんそれが返されます。

+1

そして、MySqlが魅力的なビューアルゴリズムを選択するとどうなりますか? – Ray

+2

私は完全に同意しない。 MySQL VIEWは、クエリの格納された文字列のエイリアスではありません。正しく使用しているかどうかにかかわらず、大きなパフォーマンスの損益を得ることができます。詳細は私の答えを見てください。 – Juan

関連する問題