プロが教えるわが家の防犯対策術!

インデックスが貼ってあるdate型のカラムがあるのですが、うまくインデックスがあたりません。
検索条件を下記のようにしています。

working_date = TO_DATE('2010/11/26')

date型は秒数を保持していることが影響しているのでしょうか?
ファンクションインデックスを貼って、下記のようにすればインデックスは当たってます。

 TO_DATE(working_date,'YYYY/MM/DD') = '2010/11/26'

ご存知のかたがおられましたら教えてください。

A 回答 (6件)

実際に working_date に格納されている値に時刻が含まれているのですか?



> TO_DATE(working_date,'YYYY/MM/DD') = '2010/11/26'

これは、文字列である working_date を date型に変換して、文字列と比較という奇妙なことになります。

本当に working_date が date型で、ファンクションインデックスを張るなら、
TRUNC(working_date) がよろしいかと。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>実際に working_date に格納されている値に時刻が含まれているのですか?

下記のような値がはいってます。

2010/11/26 14:58:35

やはり秒数が問題なのでしょうか?

お礼日時:2010/11/27 10:10

質問者さんはファンクションインデックスの意味を理解してないのでは...



http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …

http://www.atmarkit.co.jp/fdb/rensai/oraobstacle …
    • good
    • 0

もし、ご質問が単に「Where条件が思い通りにならない」であれば



where to_char(working_date, 'yyyy/mm/dd') = '2010/11/26'

で良いのでは?


何百万レコードもあるようならファンクションインデックスを検討してみては?
    • good
    • 0

working_date


between
TO_DATE('2010/11/26 00:00:00','YYYY/MM/DD HH24:Mi:SS')
AND TO_DATE('2010/11/26 23:59:59','YYYY/MM/DD HH24:Mi:SS')
としてみては
    • good
    • 0

・「実行計画を表示すると、TABLE ACCESS FULLとなっている」


ということなのでしょうか?

・warking_dateへのインデックスは単独列へのインデックスですか?

上記がYESであれば、実行計画はINDEX RANGE SCANになってしかるべきだと思います。
時分秒は0:0:0を指定しているのと同じなので、指定が必要とは思われませんが、
いちおう以下も試してみますか。

working_date = TO_DATE('2010/11/26 00:00:00', 'YYYY/MM/DD HH24:MI:SS')
    • good
    • 0

working_date = TO_DATE('2010/11/26','YYYY/MM/DD')


としたらどうでしょう。
時分秒があるので、DB中の項目は時分秒はどのような値になっているのでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>DB中の項目は時分秒はどのような値になっているのでしょうか?

下記のような値がはいっております。

2010/11/26 14:58:35

やはり秒数まで正確に当てにいかないとインデックスは効かないものでしょうか?

お礼日時:2010/11/27 10:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す