この質問に正しい名前を付けたかどうかはわかりませんが、説明が私の問題を説明するのに役立つ場合があります。
何百万ものレコードで構成されるPROJ_MASTERなどのメインテーブルがあります。これには、PROJ_SUB_1やPROJ_SUB_2など、これらのコードの詳細について他のテーブルにマップするコードを持つ列が含まれています。
マスターテーブルにクエリを作成するための最良の方法は何ですか1)列をマッピングします
SELECT PM.SOME_COL_1,
PM1.COL1,
PM1.COL2
FROM PROJ_MASTER PM, PROJ_SUB_1 PS1, PROJ_SUB_2 PS2
WHERE PM1.COL1 = PS1.COL1
AND PM1.COL2 = PS2.COL2
2)またはネストされたクエリを使用する
SELECT PM.SOME_COL_1,
(SELECT DISTINCT PM1.COL1
FROM PROJ_SUB_1 PS1
WHERE PM.COL1 = PS1.COL1) AS COL1
(SELECT DISTINCT PM1.COL2
FROM PROJ_SUB_2 PS2
WHERE PM.COL2 = PS2.COL2) AS COL2
FROM PROJ_MASTER PM
エイリアス(PMの代わりにPM1とPM2)を使用する際にいくつかの間違いをしました。
クエリプランの最初のクエリを表示しています)
SELECT STATEMENT, GOAL = ALL_ROWS Cost=23827 Cardinality=1037978 Bytes=76810372
HASH UNIQUE Cost=23827 Cardinality=1037978 Bytes=76810372
HASH JOIN Cost=5638 Cardinality=1037978 Bytes=76810372
TABLE ACCESS FULL Object owner=USER Object name=PROJ_MASTER
Cost=5 Cardinality=557 Bytes=17267
HASH JOIN Cost=5619 Cardinality=872654 Bytes=37524122
TABLE ACCESS FULL Object owner=USER Object name=PROJ_SUB_1
Cost=28 Cardinality=9827 Bytes=294810
TABLE ACCESS FULL Object owner=USER Object name=PROJ_SUB_2
Cost=5579 Cardinality=872654 Bytes=11344502
2番目のクエリ)
SELECT STATEMENT, GOAL = ALL_ROWS Cost=9810 Cardinality=872654 Bytes=11344502
TABLE ACCESS FULL Object owner=USER Object name=PROJ_SUB_1
Cost=5 Cardinality=1 Bytes=31
TABLE ACCESS FULL Object owner=USER Object name=PROJ_SUB_2
Cost=28 Cardinality=1 Bytes=30
HASH UNIQUE Cost=9810 Cardinality=872654 Bytes=11344502
TABLE ACCESS FULL Object owner=USER Object name=PROJ_MASTER
Cost=5579 Cardinality=872654 Bytes=11344502
前もって感謝します。