我可以在Oracle SQL中使用多个表中的索引吗?

时间:2018-07-04 13:21:07

标签: sql oracle indexing

我可以这样使用吗?

SELECT /*+ index (T1 index1_name, T2 index2_name)*/
FROM T1, T2
WHERE T1.ID = T2.ID

这是Corrent语法吗?我发现的所有示例都显示使用一个表中的索引,即使使用的表很少。

2 个答案:

答案 0 :(得分:1)

  

我可以在Oracle SQL中使用多个表中的索引吗?

当然,请查看以下示例。

drop table t1
/
create table t1
(id number(8) null,
p_name varchar2(100) null)
/
drop table t2
/
create table t2
(id number(8) null,
c_name varchar2(100) null)
/
create index idx_t1_id on t1 (ID)
/
create index idx_t2_id on t2 (ID)
/
insert into t1 (id) 
select rownum from dual
   connect by rownum<=1000000
/
insert into t2 (id) 
select rownum from dual
   connect by rownum<=1000000
/

好的,现在让我们使用强制索引运行查询,并显示它是查询计划 (通常将提示力索引用作最后一个选项,因为oracle优化程序使用成本核算方法(CBO,RBO)来确定产生查询结果的最有效方法。)

select /*+ index ( a idx_t1_id) index ( b idx_t2_id)*/  * from t1 a 
inner join  t2 b on a.id = b.id 

enter image description here

答案 1 :(得分:0)

SELECT /*+ parallel index(<table_1_name_or_alias>)  index(<table_2_name_or_alias>) */

通常有效