我知道这是一个常见的问题,我已经阅读了几篇其他的文章和论文,但是我没有找到一个考虑索引字段和两个查询可能返回的记录数量的答案。
我的问题其实很简单。在类似SQL语法的情况下,哪一个查询在性能上更被推荐。
第一个查询:
Select *
from someTable s
where s.someTable_id in
(Select someTable_id
from otherTable o
where o.indexedField = 123)
第二个查询:
Select *
from someTable
where someTable_id in
(Select someTable_id
from otherTable o
where o.someIndexedField = s.someIndexedField
and o.anotherIndexedField = 123)
我的理解是第二个查询将查询数据库中外部查询返回的每个元组,而第一个查询将首先评估内部选择,然后将筛选器应用于外部查询。
现在,考虑到someIndexedField字段已经建立索引,第二个查询可能会超快地查询数据库,但是如果我们有成千上万或数百万条记录,使用第一个查询会更快吗?
注意:这是针对Oracle数据库的。