Sql 如何强制oracle不使用索引

Sql 如何强制oracle不使用索引,sql,oracle,query-performance,hints,Sql,Oracle,Query Performance,Hints,我有一个要求,我必须强制sql不要使用表上存在的特定索引 比如说, create table t1(id varhcar2(10),data1 varchar2(3000)); create table t2(id varhcar2(10),data2 varchar2(3000)); create index id1 on t1(id); select * from t1,t2 where t1.id=t2.id; 我不能删除索引id1,也不能删除它,因为我对它没有权限。因此,我想添加一

我有一个要求,我必须强制sql不要使用表上存在的特定索引

比如说,

create table t1(id varhcar2(10),data1 varchar2(3000));
create table t2(id varhcar2(10),data2 varchar2(3000));

create index id1 on t1(id);

select * from t1,t2 where t1.id=t2.id;
我不能删除索引id1,也不能删除它,因为我对它没有权限。因此,我想添加一些提示以避免使用它

有没有这样的提示,或者有什么解决办法

提前感谢

使用无索引提示

比如说

SELECT /*+ NO_INDEX(t1 id1) */ 
  FROM t1,
       t2  
 WHERE t1.id = t2.id;

一般原则是,对于要指定执行计划的每个查询,每个表都需要两到三个提示

在本例中,您可能正在寻找由两次完整表扫描产生的哈希连接,这相当简单,因此提示块类似于:

select /*+ full(t1) full(t2) use_hash(t1 t2) */
...

通过对列应用函数,可以防止在没有提示的情况下对其使用索引。您需要使用“no op”函数,这样列值就不会更改。对于数字,这可能是添加零,对于附加空字符串的字符串:

从t1,t2中选择*其中t1.id | |“”=t2.id