9

テーブルに存在する特定のインデックスを使用しないように 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 を削除することも、権利がないため削除することもできません。したがって、使用を避けるために何らかのヒントを追加したいと思います..

そのようなヒントはありますか、またはこれに対する回避策はありますか。

前もって感謝します

4

3 に答える 3

14

NO_INDEX ヒントを使用する

http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements006.htm#BABHJBIB

例えば

SELECT /*+ NO_INDEX(t1 id1) */ 
  FROM t1,
       t2  
 WHERE t1.id = t2.id;
于 2013-06-17T06:45:56.390 に答える
3

実行計画を指定するクエリごとに、テーブルごとに 2 つまたは 3 つのヒントが必要であるという一般原則があります。

この場合、2 つの完全なテーブル スキャンの結果として得られるハッシュ結合を探している可能性があります。これはかなり単純なので、ヒント ブロックは次のようになります。

select /*+ full(t1) full(t2) use_hash(t1 t2) */
...
于 2013-06-17T10:10:22.753 に答える