2011-10-27 139 views
29

プロジェクトのコードとクエリの複雑さを軽減するためにビューを利用することを考えていました。その中にはいくつかの結合があります。そのデータは複数の場所で少し楽になります。MySQLのビューとインデックスの使用

「MySQLはビューにインデックスを使用しません」、「インデックス付きビューを使用することはできません」、「MERGEを使用する場合のみ」など、多くのものがスローされています...クリア - カット答え。

したがって、追跡するには:MySQLビューでは、作成したテーブルのインデックスから使用していますか?パフォーマンスが邪魔になるか、基礎となるテーブルのインデックスを結合の際に使用するため、ビューを使用するのは悪い考えですか?テーブルでインデックスされた列でビューをソートすると、それは通常どおり速くソートされますか?

私の研究を行っていると、ビューはインデックスを使用していないと思われるようですが、そうであれば誰もそれらを使用することはありません。明らかに人々は、そう...?

ご迷惑をおかけして申し訳ありません。

+0

http://stackoverflow.com/q/244226/632951 – Pacerier

答えて

29

ビューをクエリする場合、は、基礎となるテーブルのインデックスの使用を検討します。

ただし、ではなく、ビュー内の計算された列に新しいインデックスを追加することができます。私は、これが、例えば、SQL Server's indexed viewsとは対照的に、MySQLがインデックス付きのビューを持たないことを意味するものだと思います。

+0

私はそれが事実であると信じ始めていましたが、私が何かを約束する前に絶対に確信したいと思っていました。ありがとう、トン。 – Xkeeper

15

MySQLビューは、作成されたテーブルのインデックスを使用しますか?

はい。

MySQL doesn't use indexes for viewsと言われる人はおそらく、通常の表のように実際のビューが物理的にファイルシステムに格納されているmaterialized viewsまたはindexed viewsというものです。 OracleやSQL Serverなどの一部のDBMSでは、これらのビューの索引を作成できます。本質的には、indexed viewsはそれを構成する元のテーブルのコピーになり、kept in sync automaticallyという話があります。

たとえば、SQL ServerのIndexed Viewsに関してこの記事を読んでください。

+0

私はあなたの答えを両方とも受け入れることができればと思っています。そのノートでは、INSERT/UPDATEベースのトリガーにビューを基にしたテーブルを作成させることによって解決策を導くことができるように思われますが(おそらく?)、それはパフォーマンスのヒットになる可能性がありますアーカイブされたデータベース – Xkeeper

関連する問題