2017-08-03 67 views
0

我在Oracle数据库中创建了两个表,我在查询中使用它们,如下所示。一个表有索引,另一个表不是关于Oracle索引的查询

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 

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

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

+0

请给一个理由也是,谁被否决 –

+0

人我不认为任何索引将被使用,如果有一个索引(table_with_an_index)的唯一表得到一个SELECT * –

+1

如果你想使用索引,首先进行连接,然后再进行联合。但是这里的表演也取决于每个表格的行数。 – Steven

回答

1

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

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

指数接入并不总是最快的