簡単な質問です。このクエリに基づいて関数ベースのインデックスを作成するにはどうすればよいですか。
select * from mytable A where :var1 like A.fld1 || '%';
mytableには、fld1に通常の一意でないインデックスがあります。
クエリで関数ベースのインデックスを作成するのではなく、関数で作成します。あなたが持っているのは、関数ではなく演算子です。
あなたがしたいのは、fld1がvar1で始まる文字と一致するテーブル内のすべての行を見つけることであり、それを支援するインデックスはfld1の1つだけです。範囲スキャンにはあまり適していないため、期待できる最善の計画は高速フルインデックススキャンである可能性があります。
クエリで使用した式に関数ベースのインデックスを作成できます。
create index myindex on mytable (fld1 || '%');
ただし、このクエリにメリットがあるとは考えられません。fld1の通常の非一意のインデックスは、関数ベースのインデックスと同じように機能すると思います。