[Seasar-user:20252] [DBFlute]OracleでDATE型カラムのインデックスが利用されない

しゃってん [E-MAIL ADDRESS DELETED]
2010年 10月 20日 (水) 15:42:04 JST


しゃってん と申します。

下記条件でSQLを実行した際に意図したインデックス(日付型カラムに付与したインデックス)が利用されませんでした。
回避策は見つけているため合わせて報告いたします。

環境
・Oracle 11gR2
・Java 6
・ojdbc-6
・S2Framework 2.4.41
・DBFlute 0.9.7.1

テーブル情報
・日付型(DATE型)カラムにインデックスを付与
・検索条件で日付の From To を指定

実行条件
・ConditionBeanでSQLを組み立てて実行
 ex) cb.query().setTargetDate_FromTo(fromDate,toDate,new DateFromToOption());


データ件数が少ない場合はインデックスの利用有無に関わらず応答があったため気にならなかったのですが、
大量データ(数百万件以上)のデータを登録した際に応答が悪くなったため調査をいたしました。

実行計画を確認したところ、SQL実行時に検索条件の日付がOracleのファンクションによって型変換がおこなわれるために
インデックスが利用されないといった状況になっておりました。

回避策として、DateFromToOption の filterFromDate 及び filterToDate
をオーバーライドし返却する値を java.sql.Date 型にすることで
ファンクションの型変換が行われず、意図したインデックスを利用することができました。

DB型がDATEの場合にSQLのパラメータを組み立てる際、自動的にjava.sql.Dateへの変換は行えないでしょうか?
(回避策があるため、緊急性はありません。)

以上、検討をお願いいたします。


Seasar-user メーリングリストの案内