Oracle に次のようなテーブルがあります。
create table suppliers(name varchar2(100));
に対応するインデックスがある場合upper(name)
:
create index supplier_name_upper_idx on suppliers(upper(name));
JDBC クエリを実行しているサーブレットから情報を取得して、AJAX を介してオートコンプリートを作成したいと考えています。
これは機能します:
PreparedStatement ps =
conn.prepareStatement(
"select * from suppliers where upper(name) like ?"
);
ps.setString(1, 'something%');
問題は、私が知る限り、ステートメントのコンパイル時に、パラメーターが(インデックスからパフォーマンス上の利点を得ることができる) か(できないか)PreparedStatement
になるかを知ることができないため、インデックスを使用しないことです。インデックスからパフォーマンス上の利点を得るために)。'something%'
'%something%'
だから、私の質問は:
Statement
代わりにa を使用する必要がありますか? もしそうなら、入力パラメータをエスケープする最良の方法は何ですか(AJAXリクエストから来るため)PreparedStatement
インデックスを使用するために使用できるものはありますか?