1

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%'

だから、私の質問は:

  1. Statement代わりにa を使用する必要がありますか? もしそうなら、入力パラメータをエスケープする最良の方法は何ですか(AJAXリクエストから来るため)
  2. PreparedStatementインデックスを使用するために使用できるものはありますか?
4

1 に答える 1

1

サーバー側での解析が少なくなり、その結果、「ラッチ:ライブラリキャッシュ」が少なくなるため、準備されたステートメントの方が優れていると思います。

SELECT /*+ INDEX suppliers(supplier_name_upper_idx) */ * from suppliers ....ステートメントにインデックス「supplier_name_upper_idx」を使用する必要があります。

于 2012-12-01T15:33:17.900 に答える