2 つのデザインのパフォーマンスについて質問があります。目標は、いくつかの属性を共有しながらも異なる、複数のタイプのエンティティを格納することです。
アプローチ 1: 複数のテーブル、それぞれが 1 つのエンティティをモデル化する
Entity1 - C1, C2, C3
Entity2 - C1, C2, C4
Entity3 - C1, C2, C5
クエリを実行するにはUNION ALL
、すべてのテーブルに対して a を実行する必要があります。
アプローチ 2: すべての列と型列を含む単一のテーブル
All - Type, C1, C2, C3, C4, C5
ここでは、列に対して直接クエリを実行できます。
問題は、UNION ALL
アプローチにパフォーマンスの問題があるかどうかです。この質問は、回答されていない PostsgreSQL に関する以前の質問に似ています。
編集:
すべての回答に感謝します。
エンティティ テーブルには日付のインデックスが付けられます。また、クエリはほとんどの場合、日付がフィルター処理されているか、共有フィールドがフィルター処理されています。C1 が日付で、C2 が文字列で、クエリの 95% が C1>=from および C1<=to、または C2='SomeId' のように見えるとします。
レコード数はゆっくりと増加し、1 エンティティあたり 1 日あたり数百程度になる可能性があります。列の数は 150 を超えることはありません。ただし、共有される列の数は少ないです。現在、各エンティティは共有以外のフィールドを主キーとして使用する可能性があるため、アプローチ1を実装しています。このようにして、制約はより自然になります。