[Seasar-user:20256] Re: [DBFlute]OracleでDATE型カラムのインデックスが利用されない
kubo
[E-MAIL ADDRESS DELETED]
2010年 10月 21日 (木) 00:38:17 JST
久保(jflute)です。
しゃってんさん、dbflute-oracle-example にて、
JDBC直接利用で日付周りを検証するテスト書きました。
VendorPlainTest.java
test_PreparedStatement_bindDate_timeHandling_Tx()
※Oracle10g XE にて、ojdbc5.jar、ojdbc6.jarの両方でグリーン
OracleのDATE型に対して、JDBCにおいて java.sql.Date で
取り扱うと、検索条件も値取得も時分秒が切り捨てられて
しまうことが上記のテストでわかります。
なので、DATE型に対しては、java.sql.Timestamp で取り扱う
のが基本と考えられます。
ただ、しゃってんさんの環境での現象が、
「java.sql.Date で設定すると逆にインデックスが利用される」
ということになるのであれば、かなりややこしい問題となります。
状況確認の前に論理を整理してみましたが、
上記のようなややこしい問題なのか、それともまた別の要因があるのか、
確認するために以下のトライをお願いします。
DBFluteConfigの処理をやめるとインデックスが利用されるか?
ValueTypeは簡単に独自のものに差し替えられるので、
JDBC に setDate() するか、setTimestamp() するかで、
インデックスの利用有無の違いが発生しているのかどうかを
確認して頂けると幸いです。
※そもそも、Oracle11g だと上記のテスト結果が違うとか
だとさらにややこしくなりますが...
Seasar-user メーリングリストの案内