我可以这样使用吗?
SELECT /*+ index (T1 index1_name, T2 index2_name)*/
FROM T1, T2
WHERE T1.ID = T2.ID
这是Corrent语法吗?我发现的所有示例都显示使用一个表中的索引,即使使用的表很少。
答案 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
答案 1 :(得分:0)
SELECT /*+ parallel index(<table_1_name_or_alias>) index(<table_2_name_or_alias>) */
通常有效