【发布时间】:2013-07-18 05:46:10
【问题描述】:
以下哪一项查询效率更高,为什么?根据执行计划,它们的总成本相同,但我不确定仅此一项是否能很好地衡量整体性能。
1>
SELECT MIN(ROWID), MAX(ROWID)
FROM tab_a
WHERE status = 0
AND EXISTS (
SELECT 'X'
FROM tab_b
WHERE status = 0
AND number = assembly_number
AND ROWID >= :min_rowid
AND ROWID <= :max_rowid
)
;
2>
SELECT MIN(ROWID), MAX(ROWID)
FROM tab_a
WHERE status = 0
AND assembly_number IN (
SELECT number
FROM tab_b
WHERE status = 0
AND ROWID >= :min_rowid
AND ROWID <= :max_rowid
)
;
【问题讨论】:
-
这在很大程度上取决于表上的索引。
-
@astander:真的吗?有人会认为查询规划器将它们视为等价的(这似乎是因为它显示相同的成本)。
-
你能显示两者的执行计划吗? (看起来它们可能是相同的)。
-
@AppleGrew 看看asktom.oracle.com/pls/asktom/…
-
如果查询优化器将两者优化到同一个查询中,我不会感到惊讶。