我有两个表 A 和 B,其中 A 中的一条记录映射到 B 中的几条记录。有一个查询显示表 A 的记录,以及表 B 中的所有映射记录在一行中,例如:
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 不允许使用聚合函数在提交时快速刷新此类查询。
另一种选择是向表 A 添加一列,其中包含来自 B 的计算值,并在表 B 上使用触发器来更新新列(如果进行了任何更改)。但这也不可行,因为您无法查询触发器所在的同一个表。
作为最后的手段,我们决定实现第二个选项并通过应用程序代码更新列,这非常繁琐。
有任何想法吗?