2011-02-03 18 views
19

私は、特定の基準を満たすデータを強調表示するテーブルのビューを作成しようとしています。たとえば、整数値のテーブルがある場合、100より大きい値を持つ行を表示するようにしたいと思います。テーブルのビューを作成することでこれを実現する方法はわかりますが、ビューは動的ですか?私はこれをMySQLでテストしたところ、それは正しいと思われます。しかし、私のテーブルに1000行以上がある場合、これは効率的ですか?ビューは元のテーブルの変更に対して「動的に」更新されますか?MySqlビューは動的で効率的ですか?

+0

http://stackoverflow.com/q/7922675/632951を参照してください。 – Pacerier

答えて

23

基本的に、MySQLには2 types of viewsが基本的にあります。

  1. ビューのこのタイプは、基本的にはビューのSQLを使用してクエリを再書き込みビュー

    をマージします。それで、あなた自身で質問を書くのは簡単です。実際のパフォーマンス上のメリットはありませんが、複雑なクエリを簡単に作成し、メンテナンスを容易にすることができます(ビュー定義が変更された場合、ビューに対して100のクエリを変更する必要はなく、

  2. TEMPTABLEビュー

    ビューのこのタイプは、ビューのSQLからのクエリで一時テーブルを作成します。マージビューのすべての利点がありますが、ビューのテーブルのロック時間も短縮されます。したがって、負荷の高いサーバーでは、パフォーマンスが大幅に向上する可能性があります。

しかし、注意することが重要なことを注意してください、ということです...またのは、MySQL、クエリ時に最良のタイプがあると考えて何を選んでみましょう「未定義」ビュータイプ(デフォルト)、ありますMySQLはmaterialized viewsをサポートしていません。したがって、Oracleと似ているわけではありません。複雑なビューでは、問合せのパフォーマンスが大幅に向上します。ビューのクエリは、常にMySQLで実行されます。

効率性に関して、MySQLのビューは効率を増減しません。彼らはあなたの人生をより簡単にして、質問を書いたり維持したりします。私は何億もの行を持つテーブルのビューを使用しており、正常に動作しています...

+0

OKです。おかげでircmaxell! – Santiago

+1

ビューを使用するとパフォーマンスに影響します。つまり、MySQLはネストされたクエリにうまく対処できません。プッシュするための機能は非常に限られています。 OTOH SELECTネストがないクエリを最適化することは非常にうまくできます。 – symcbean

+0

@symcbean:あなたはその請求を取り戻すための参照がありますか?私はそれを(正当にそうそう)見るために好奇心が強いだろう... – ircmaxell

9

mysqlは一時テーブルでインデックスを使用しないため、パフォーマンスに悪影響を及ぼします。

関連する問題