Oracle不同版本在驱动运行中如何使用Java Date

本文主要介绍的是Oracle不同版本在驱动运行中如何使用Java Date的相关问题的解答,如果你在计算机学习的过程中遇到Oracle不同版本在驱动运行中使用Java Date时,出现的类似的问题,你就可以点击以下的文章。

这里两天都在对一条sql进行调优。该sql并不复杂,类似于

select … from some_view union all select … from some_table where datetime >= d1 and datetime< d2 and …. 底层使用ibatis2.1.6 + Oracle 10g。

今天花了些时间继续研究这个问题,导致该问题的原因的确是“导致Oracle对datetime字段进行了隐式类型转换,最终CBO未能使用该列的全局索 引”,不过问题不是出在ibatis上而是Oracle driver。

设我们使用这样的sql通过绑定变量(类型为java.util.date)查询数据库,其中end_date是date类型且建立了索引。

  1. “select count(*) from table1 where end_date >
    = :1 and end_date <= :2” 

通常,面对这样的sql,我们希望它的执行计划走index range scan。然而在默认情况下Oracle CBO是不会选择走索引地,以上面这语句为例,Oracle实际走的是table full scan。为什么会这样 呢?

这类问题是Oracle不同版本在9.2以后引入了TIMESTAMP才开始出现地。

在 9.2之前,Oracle只有DATE,而没有TIMESTAMP。在jdbc preparedStatement.setTimestamp时,绑定变量的类型会被正确的设置为DATE。而在9.2之后,Oracle开始支持 TIMESTAMP了,这两者都能支持精度为yyyy-MM-dd hh24:mi:ss的时间(当然TIMESTAMP能支持到纳秒级别),但jdbc driver的api未变同样在preparedStatement.setTimestamp时,Oracle driver就得选择到底该把绑定变量的类型设置为DATE还是TIMESTAMP呢?

估计是由于TIMESTAMP的精度更高,Oracle 最终默认选择了将绑定变量的类型设置为了TIMESTAMP。那么这个时候,如果面对实际属性为DATE的列,那么就会导致 Oracle隐式地进行形如“TO_TIMESTAMP(date_column) = parameter_timestamp”转换,要 知道Oracle CBO不会选择被某函数作用的列上的索引,除非是函数索引。

因此,最终也会导致最上面的情况使用table full scan而不是index range scan。

Oracle就没有提供别的方法来正确地提供绑定变量吗?Oracle提供 了几个方法来解决这个问题

1.升级到11g并使用新的正确的driver api。

2.将DATE列全都改成 TIMESTAMP列。

3.使用V8Compatible flag。

 

以上的相关内容就是对Oracle不同版本驱动中使用Java Date的问题的介绍,望你有所收获。

【编辑推荐】

  1. Oracle clob实际相关代码的解析
  2. Oracle存储过程的返回列表如何以java来调用
  3. Oracle版本驱动中使用Java Date产生问题的解答
  4. Oracle clob实际相关代码的解析
  5. Oracle数据库备份和恢复的基本命令

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/271595.html<

(0)
管理的头像管理
上一篇2025-05-08 08:45
下一篇 2025-05-08 08:48

相关推荐

  • GEO友好的服务器标准有哪些,如何判断?

    SEO友好的服务器,核心标准是速度、稳定性、IP纯净度、安全合规以及服务商资质,缺一不可, 选择服务器不能只看配置,更要关注机房基础设施、网络质量、IP信誉以及服务商是否持牌经营,符合这些条件的服务器,才能让百度爬虫顺利抓取、用户获得良好体验,从而稳定提升排名,速度:服务器响应时间与硬件配置百度最新的核心算法中……

    2026-07-26
    0
  • 机房T3等级是什么意思?,T3机房等级标准有哪些?

    机房T3等级,代表数据中心具备并行维护能力和N+1冗余架构,可用性达到99.982%级别,是当前企业托管业务的主流选择,什么是机房T3等级?核心定义与行业标准机房T3等级源自Uptime Institute的数据中心分级标准,也对应TIA-942的Rating 3等级,这个等级的核心特征就是可并行维护——在任意……

    2026-07-26
    0
  • 服务器SLA服务协议是什么有什么用,有哪些注意事项?

    服务器SLA服务协议是服务商与用户之间关于服务可用性、性能等方面的正式承诺,它直接决定了业务稳定性和运维成本,什么是服务器SLA服务协议服务器SLA(Service Level Agreement)是服务等级协议的缩写,在IDC和云服务领域,它是一份具有法律效力的合同附件,明确服务商必须提供的服务水平基准,这份……

    2026-07-26
    0
  • 站群服务器泛站和泛目录有什么区别?,怎么选

    泛站基于多个独立域名构建独立站点,泛目录则在同一域名下通过目录结构构建内容,这直接影响SEO权重分配和资源管理,什么是泛站和泛目录泛站模式泛站模式使用多个独立域名,每个域名部署独立网站,内容互不关联,这种结构下,每个站点各自积累SEO权重,适合需要大量外链或分散风险的场景,推广不同产品时,泛站能避免单一站点被处……

    2026-07-26
    0
  • 服务器防火墙硬件和软件哪个效果更好,怎么选

    在服务器防火墙的选型中,硬件防火墙与软件防火墙并非非此即彼,而是互补关系,对于追求高安全等级与稳定性的生产环境,采用硬件防火墙做网络层隔离,配合软件防火墙做主机层加固,是当前公认效果最好的组合方案,硬件防火墙与软件防火墙的核心差异性能与资源占用硬件防火墙依托专用ASIC芯片或FPGA处理数据包,转发延迟通常在微……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注