2011-01-05 3 views
7

我々は(11)Oracleと休止状態と「iLikeの」の使用に起因する深刻なパフォーマンスの問題を抱えている、「のような」大文字小文字を区別しません使用しています。Oracleデータベースと休止状態の基準「iLikeのクエリ」をスピードアップする方法

のJava/Hibernateのようなコードに見えます:Oracleが、その結果、インデックスを使用するためには「下」関数は、それが不可能

select * from ACCOUNT where lower(ADDRESS_1) = ? 

ようなSQL文が生成され

c1.add(Restrictions.ilike("address", address)); 

フルテーブルスキャン。

私はアドレスの小文字のコンテンツが含まれているDBテーブルに新しい列を導入することを考えました。 私はその後、使用することもできます。その後、私は下ケース

でインデックスを作成すると考え

c1.add(Restrictions.ilike("addressLCase", address.toLowerCase())); 

を...しかし、私は本当に二回コンテンツを格納するためのアイデアを好きではない...

CREATE INDEX ADDRESS_1_IDX ON ACCOUNT lower( ADDRESS_1 ) ; 

が、私はこのインデックスを使用するようにオプティマイザを説得することはできませんので、これは、動作しませんでした...

だから私はHibernateの基準APIを持つ高速なクエリを作成するために何ができるかと'好き' ?

答えて

5

機能ベースのインデックスは、私の選択になります。ちょうど覚えておいてください:

  • コストベースオプティマイザを使用してください。ファンクション索引は、コストベース・オプティマイザにのみ表示され、ルールベース・オプティマイザではこれまで使用されません。

thisからの抜粋。

関連する問題