我知道这是一个常见问题,并且我已经阅读了其他几篇文章和论文,但我找不到一个考虑到索引字段和两个查询可以返回的记录量的文章。
我的问题真的很简单。这里推荐使用类似 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 数据库中。