2011-09-14 19 views
1

私は以下の質問があります。私は2つのテーブルを持っており、それらを別々に保管したい。しかし、私のアプリケーションでは、定期的にUNION操作を実行する必要があるため、効果的にUNION操作を行う必要があります。私はこれがパフォーマンスの点では良くないと思います。次のビューを作成することを考えていました。MySQL作成ビューとパフォーマンス

CREATE VIEW merged_tables(fields from both tables) AS 
    SELECT * FROM table_a 
UNION 
    SELECT * FROM table_b 

SELECTクエリのパフォーマンスにどのような影響がありますか?それは本当のインパクト(内的表現が異なる)を持っているのか、それとも簡単なクエリを使って選択するだけの問題なのでしょうか?

ありがとうございました。

答えて

3

ビュー内でUNIONを使用すると、SELECT文でUNIONを使用する場合とパフォーマンスが変わりません。両方のテーブルでSELECT *を使用しており、内部の複雑さを必要としないため(例:JOINSまたはWHERE句なし)、それをさらに最適化する方法はありません。テーブルは同様のデータを保持して行うと、あなたは論理的に分離して保持する場合

しかし、あなたは、行がそうでなければtable_aまたはtable_bの居住者であったであろうかどうかを示すbooleanコラムで一つのテーブルにそれをすべて格納し検討するかもしれません。行を分けて、UNIONの追加された混乱を避ける方法が得られ、パフォーマンスにも大きな影響はありません。

1

より単純なクエリを使用して選択するだけです。速度の違いはありませんが、すべてのデータを単一のテーブルに保存した場合よりも、ユニオンのクエリのコストは(ほとんどの場合は)それほど悪くはありません。これらは単一であるため

CREATE VIEW table_a AS SELECT * FROM table_all WHERE rec_type = 'A' 
CREATE VIEW table_b AS SELECT * FROM table_all WHERE rec_type = 'B' 

を:

テーブルが本当に同じ構造であれば、あなたも、あなたが論理的にレコードを分離するために、単一のストレージ用のテーブルと2つのビューが使用されている別の設計を検討することもできINSERT、UPDATE、DELETE、SELECTのテーブルのように使用することができますが、理にかなってtable_allをプログラムすることもできるという利点があります。ここでのソリューションの利点は、table_a、table_bエンティティまたは table_allエンティティに対して更新でき、維持する2つの物理テーブルがないことです。

関連する問題