Oracle SQL语句为什么不走索引-场景四

来源:这里教程网 时间:2026-03-03 20:49:50 作者:

二 索引列和连接谓词的关系基于优化系列的背景,如下面的连接谓词定义了deptno列上的emp和dept表之间的连接: p.deptno = deptno .deptno 如果索引列是连接谓词的一部分,那么:在执行查询时,使用什么类型的连接方法来实现连接? 2.1 哈希/排序合并连接:使用哈希连接和排序合并连接,外部表的信息在连接时不可用,以启用对内部表的行查找;而是分别访问两个表,然后将结果数据连接起来。不能仅使用基于连接列的索引来探测哈希或排序合并的内部表。这是这些连接类型使用的实现机制的固有限制。嵌套循环连接的不同之处在于它们允许对连接列进行索引查找。 2.2 嵌套循环连接:嵌套循环连接工作通过读取外部表,然后使用收集到的信息来探测内部表。该算法允许在内部表上进行索引查找。 只有嵌套循环连接才能允许在内部表上仅基于连接列进行索引查找: 另外,连接顺序是否允许使用索引?     当使用嵌套循环连接时,必须先访问嵌套循环连接的外部表,然后才能在内部表上使用索引。检查查询的解释计划,以确定使用了哪个访问路径以及访问表的顺序。由于这个限制,表的连接顺序很重要。 例如:如果我们像上面那样使用“EMP. deptno = DEPT .deptno”谓词将EMP连接到DEPT,并且在EMP. deptno上有一个索引(假设在查询中没有与EMP. deptno相关的其他谓词),如果EMP在DEPT之前被访问,那么当时没有行值存在,可以用来查找EMP. deptno索引中的行,因为我们还没有访问任何对象来提供这样的查找键。在这种连接顺序下,使用索引的唯一方法是使用全索引扫描或索引快速全扫描(读取整个索引)。在这种情况下,有可能选择全表扫描(FTS)成本更低。

相关推荐