分離されたテーブルを使用する Postgresql のようなリレーショナル データベースの場合はより効率的であることはわかっていますが、最も実行されるクエリは を使用して複数のテーブルから行をフェッチするため、パフォーマンスの問題が懸念されますUNION ALL
。
この問題を処理するには、オプションを選択する必要があります。最初のものは次のとおりです。
table1 -> column1, column2
table2 -> column1, column2
table3 -> column1, column2, column3
このソリューションではUNION ALL
、本番環境でマージされた 3 つの異なるクエリを使用する必要があり、このクエリはシステムにログインしているユーザー (システムで最も実行されたクエリ) によって実行されます。
もう1つは次のとおりです。
table -> column1, column2, typeColumn, extraColumnForTable3
このソリューションではtypeColumn
、行のタイプを区別するために追加の列を作成する必要があります。また、型の列を作成する必要がextraColumnForTable3
あり、型table3
の場合は NULL になりtable2
ますtable1
。このソリューションでは、最も実行されるクエリには 1 つのSELECT
ステートメントのみが含まれます。
本番では数百万行になるので、パフォーマンスが心配です。NULL
値はデータベース内の余分なスペースを占有する可能性がありますが、無視できると思います. NULL 値を排除する部分インデックスを使用するので、特定の型を取得する他のクエリには影響しないと思います。どちらが生産効率が高いと思いますか?