oracle日期类型

查询慢的问题,经过验证和查询,已经初步得出结论,发现我们查询所用的时间字段传输的java.util.Date,在ibatis里通过jdbcType方式赋值 #endTime :TIMESTAMP#,
而数据内字段的类型是DATE,在数据库内做类型转换会很耗时,Oracle支持Date和 TIMESTAMP两种时间类型,而我们数据库设计都是Date类型但是itabits里使用的都是 TIMESTAMP.
   
    两种解决办法,测试时间都能将查询的3-5分钟提升到十几秒,用PLSQL执行也是十几秒。
    方法一: 改成传输字符串,在ibatis里用to_date函数转成java.sql.date类型, tr.TRADE_START_TIME <=  to_date(#endTime#, 'yyyymmdd hh24:mi:ss')
    方法二: 在ibatis里将jdbcType设置成 : DATE      # endTime :TIMESTAMP#   改成    #endTime :DATE#
    
     Date  :在Oracle里只能精确到秒。
   TimeStamp:可以  精确到微秒。
    如果数据库中时间字段定义为date类型,由于timestamp类型的精度比date类型的精度高,所以oracle会对数据库里的date类型做出隐身转换,将date类型转换为timestamp类型,由于加了函数,那么创建在date类型上的索引将不会使用到;(好像是oracle9i后开始才有的问题)

java.sql.Date无法满足包含时间信息的要求,java.sql.Timestamp在Oracle被识别为timestamp类型,跟DATE类型不符,不能使用索引。所以综合来看,使用to_date函数传入字符串类型的时间串最好。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值