更新: col列をNOTNULLにしてみてください。それがインデックスを使用しない理由です。 nullでない場合は、ここに計画があります。
SELECT STATEMENT, GOAL = ALL_ROWS 69 10 30
HASH GROUP BY 69 10 30
INDEX FAST FULL SCAN SANDBOX TEST_INDEX 56 98072 294216
オプティマイザーがインデックスを使用しない方が効率的であると判断した場合(おそらくクエリの書き換えが原因)、使用しません。オプティマイザのヒントはまさにそれです。つまり、好きなインデックスをOracleに伝えるためのヒントです。 使用する。あなたはそれらを提案として考えることができます。ただし、オプティマイザがインデックスを使用しない方がよいと判断した場合(たとえば、クエリの書き換えの結果として)、使用されません。
次のリンクを参照してください: http://download。 oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm 「これらのヒントの1つを指定すると、オプティマイザーは、インデックスまたはクラスターの存在とSQLステートメントの構文構造に基づいてアクセスパスが使用可能な場合にのみ、指定されたアクセスパスを選択します。ヒントが使用できないアクセスパスを指定している場合、その後、オプティマイザはそれを無視します。」
count(*)操作を実行しているため、オプティマイザーは、インデックスを使用するよりも、テーブル全体をスキャンしてハッシュする方が効率的であると判断しました。
ヒントに関するもう1つの便利なリンクは次のとおりです。