最大のパフォーマンスが目標であると仮定すると、理想的にはSUBSTR(my_field,1,6)
を選択します。 クエリをサポートする関数ベースのインデックスを作成します。
CREATE INDEX my_substr_idx
ON my_table( substr( my_field,1,6 ) );
他の人が指摘しているように、SUBSTR(my_field,1,6)
MY_FIELD
で通常のインデックスを使用することはできません 。 LIKEバージョンはインデックスを使用する場合がありますが、その場合のオプティマイザーのカーディナリティ推定は一般にかなり貧弱であるため、役立つ場合はインデックスを使用しないか、テーブルスキャンが望ましい場合はインデックスを使用する可能性が高くなります。実際の式にインデックスを付けると、オプティマイザが操作する情報がはるかに多くなるため、インデックスを正しく選択する可能性が高くなります。私より賢い人なら、11gの仮想列の統計を使用して、オプティマイザーにLIKEクエリに関するより良い情報を提供する方法を提案できるかもしれません。
6が変数の場合(つまり、最初の6文字を検索したい場合や、別の数字を検索したい場合)、そのクエリをサポートする関数ベースのインデックスを思い付くことができない可能性があります。その場合は、LIKE定式化を使用したオプティマイザーの決定の気まぐれを利用したほうがよいでしょう。