Oracle 10g 64 位 Red Hat Enterprise Linux 5 64 位
我目前可以访问规范化的第三方数据库。这些有大量数据,我的要求是通过连接大量表来公开物化视图。
表 1:Example_Master 列:MasterID (VARCHAR2(250)) MasterName (VARCHAR2(250)) 行:9000 万主键:MasterID
表 2:Example_ChildA1 列:ChildA1ID (VARCHAR2(250)) MasterID(VARCHAR2(250)) 行:2500 万
表 3:Example_ChildA1ID 列:ChildA1ID (VARCHAR2(250)) ChildA1Name(VARCHAR2(250)) 主键:ChildA1ID
表 4:Example_ChildA2 列:ChildA2ID (VARCHAR2(250)) MasterID(VARCHAR2(250)) 行:3500 万
表 5:Example_ChildA2ID 列:ChildA2ID (VARCHAR2(250)) ChildA2Name(VARCHAR2(250)) 主键:ChildA2ID
ETC。,
每个子表可能有也可能没有与 MASTERID 等效的条目。所以我必须获取所有 MASTERID 及其相关的 CHILD 名称。如果没有任何 Child 的等效值,则它必须返回“NULL”。所以我现在有下面的物化视图语法
SELECT a.MasterName, c.ChildA1Name, e.ChildA2Name, g.ChildA3Name
FROM
Example_Master a,
Example_ChildA1 b,
Example_ChildA1ID c,
Example_ChildA2 d,
Example_ChildA2ID e,
Example_ChildA3 f,
Example_ChildA3ID g
WHERE
c.ChildA1ID(+) = b.ChildA1ID
AND e.ChildA2ID(+) = d.ChildA2ID
AND g.ChildA3ID(+) = f.ChildA3ID
AND a.MasterID=b.MasterID (+)
AND a.MasterID=d.MasterID (+)
AND a.MasterID=f.MasterID (+)
我必须再加入 5 个像上面这样的子表,并且这个查询的成本变得如此巨大,以至于需要将近 16 分钟才能得到结果。有没有更好的方法来使用 OUTER JOINS?如果您需要有关我的问题的更多详细信息,请告诉我。
谢谢!