查询Oracle索引

时间:2017-08-03 06:57:01

标签: sql oracle indexing

我在Oracle DB中创建了两个表,我在查询中使用它们,如下所示。一个表有索引,另一个表没有

    select * from (
    select * from table_with_an_index
    union all
    select * from table_without_an_index
    )first_table
    join second_table 
   where first_table.index_col=second_table.col 

我的问题是,在上面的查询中,将使用第一个表的索引?或者它会先将两个表中的记录存储在内存中,然后应用过滤器而不使用第一个表的索引吗?

我在互联网上搜索了这个,我无法得到正确的答案。任何线索将不胜感激

1 个答案:

答案 0 :(得分:1)

在这种情况下,CBO可能会进行2次完整扫描,然后联合然后进行散列连接。

如果第二个表很小,很少有值,并且访问table_with_an_index的百分比很小,那么CBO可能会推送谓词并使用完全扫描和嵌套循环进行索引访问联合。

索引访问并不总是最快