2011-09-14 18 views
0

多くのフィールドに参加するクエリがあります。いくつかの奇妙な理由で、あるテーブルのインデックスがまったく使用されていない(私はインデックスキーをはっきりと使用しています)代わりにFULLテーブルスキャンを実行しています。私は指数を強制したいと思います。私たちはsybaseでオプティマイザ・ヒントを使用していました。 Oracleと同様のヒントがありますか?例えば、テーブルA、B、Cに参加し、表Aにmyindexを使用できるのは、Sybaseには、私はどうなる :oracleでインデックスを強制する

SELECT a.* 
FROM  a(INDEX myindex), 
     b, 
     c 
WHERE a.field1 = b.field1 
AND  b.field1 = c.field1 

質問は、私は神託でこれを行うのですかです。 ありがとう Saro

+1

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements006.htm#SQLRF50405 – NullUserException

+0

あなたはクエリプランをポストでした:それは次のようになりますか? –

+4

クエリオプティマイザを試してみてください。簡単な説明:http://stackoverflow.com/questions/7358137/oracle-full-text-search-with-condition/7379753#7379753 – NullUserException

答えて

4

はい、Oracleのようなヒントがあります。

select /*+ index(a my_index) */ from a 
+0

tablespecが必要です([docs](http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements006.htm#SQLRF50405)を参照)。オラクルが索引を使用するが、索引を指定したくない場合は、索引名はオプションです。だから、 'INDEX(a my_index)'でなければなりません。また、表にエイリアスがある場合は、エイリアスをテーブル指定として使用する必要があります。おかげさまで –

+0

だから、私はこのような何かをすべきと言っている: SELECT/* +インデックス(my_indexを)*/*(INDEXのmyindex)、 \t \t B、 \t \t C a.field1 = Bから。 .field1 AND b.field1 = c.field1 –

+1

@Saro - no: 'SELECT/* + index(a my_index)*/a。* FROM a、b、c WHERE a.field1 = b.field1 AND b.field1 = c.field1'。 (ANSI結合を使用するのが望ましいですが、それは別の主題です...) –

関連する問題