Oracle10g64ビットRedHatEnterprise Linux564ビット
現在、正規化されたサードパーティのデータベースにアクセスできます。これらには膨大な量のデータがあり、私の要件は、多くのテーブルを結合してマテリアライズドビューを公開することです。
表1:Example_Master列:MasterID(VARCHAR2(250))MasterName(VARCHAR2(250))行:9千万主キー: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
等。、
各子テーブルには、MASTERIDと同等のエントリがある場合とない場合があります。したがって、すべてのMASTERIDとそれに関連する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を使用するためのより良い方法はありますか?私の問題についてさらに詳しい情報が必要な場合はお知らせください。
ありがとう!