我在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
我的问题是,在上面的查询中,将使用第一个表的索引?或者它会先将两个表中的记录存储在内存中,然后应用过滤器而不使用第一个表的索引吗?
我在互联网上搜索了这个,我无法得到正确的答案。任何线索将不胜感激
答案 0 :(得分:1)
在这种情况下,CBO可能会进行2次完整扫描,然后联合然后进行散列连接。
如果第二个表很小,很少有值,并且访问table_with_an_index的百分比很小,那么CBO可能会推送谓词并使用完全扫描和嵌套循环进行索引访问联合。
索引访问并不总是最快