A のレコードが B の複数のレコードにマップされている 2 つのテーブル A と B があります。テーブル A のレコードと、テーブル B のマップされたすべてのレコードを次のように 1 行で表示するクエリがあります。
TABLE A
--------
ID Name Tag ......
1 X 213
2 Y 222
TABLE B
--------
ID ACCESS_AREA
1 101
1 104
1 105
2 101
2 103
クエリは次のようになります。
SELECT ID,
Name,
Tag ,.....,
(SELECT WM_CONCAT(ACCESS_AREA)
FROM B
WHERE ID = A.ID ) Access_areas
FROM A
上記は機能しますが、両方のテーブルのレコード数が非常に多いため、クエリのパフォーマンスは非常に低くなります。フィルター処理や並べ替えを行うと、access_areas
パフォーマンスがさらに低下します。
マテリアライズド ビューを使用して事前に値を計算することを考えたので、単純な結合になりますが、mv では、集計関数を使用したそのようなクエリのコミット時に高速更新を行うことはできません。
もう 1 つのオプションは、B から計算された値を含むテーブル A に列を追加し、変更が行われた場合にテーブル B でトリガーを使用して新しい列を更新することでした。ただし、トリガーがある同じテーブルをクエリできないため、これも実行できません。
最後の手段として、2 番目のオプションを実装し、アプリケーション コードを使用して列を更新することにしましたが、これは非常に面倒です。
何か案は?