我的声明类似于;
SELECT tableA A, tableB B, tableC C
WHERE a.ID = b.ID and
C.level = '2'
如果我执行
SELECT tableA A, tableB B, tableC C
WHERE a.ID = b.ID and
我的结果会在33秒后返回。如果我执行原始查询,结果将在150秒内返回。为什么C.level = '2'
会让它变慢?
答案 0 :(得分:0)
如果你看一下Oracle的执行计划,你会看到它在幕后做了什么。但是,总而言之,我的猜测是你的逻辑是:
通过添加
C.level = '2'
,我们应该获得一个较小的数据集,因此应该更快地返回
但是,对于数据库引擎,它现在必须遍历数据并检查每条记录以查看它是否与更复杂的条件匹配。它是如何做的由您的架构决定的。例如,如果您在c.level
上有索引,则可能会使性能差异微不足道。