我不确定我是否正确命名了这个问题,但解释可能有助于向您解释我的问题。
我有一个主表,说 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
我在使用别名时犯了一些错误(PM1 和 PM2 而不是 PM)。
我正在显示查询计划第一个查询)
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
第二次查询)
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
提前致谢。