自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle不同版本在驅(qū)動(dòng)運(yùn)行中如何使用Java Date

數(shù)據(jù)庫 Oracle
本文主要涉及到的是Oracle不同版本在驅(qū)動(dòng)運(yùn)行中如何使用Java Date的相關(guān)實(shí)際操作步驟的介紹,希望你會(huì)有所收獲。

本文主要介紹的是Oracle不同版本在驅(qū)動(dòng)運(yùn)行中如何使用Java Date的相關(guān)問題的解答,如果你在計(jì)算機(jī)學(xué)習(xí)的過程中遇到Oracle不同版本在驅(qū)動(dòng)運(yùn)行中使用Java Date時(shí),出現(xiàn)的類似的問題,你就可以點(diǎn)擊以下的文章。

這里兩天都在對(duì)一條sql進(jìn)行調(diào)優(yōu)。該sql并不復(fù)雜,類似于

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

今天花了些時(shí)間繼續(xù)研究這個(gè)問題,導(dǎo)致該問題的原因的確是“導(dǎo)致Oracle對(duì)datetime字段進(jìn)行了隱式類型轉(zhuǎn)換,最終CBO未能使用該列的全局索 引”,不過問題不是出在ibatis上而是Oracle driver。

設(shè)我們使用這樣的sql通過綁定變量(類型為java.util.date)查詢數(shù)據(jù)庫,其中end_date是date類型且建立了索引。

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

通常,面對(duì)這樣的sql,我們希望它的執(zhí)行計(jì)劃走index range scan。然而在默認(rèn)情況下Oracle CBO是不會(huì)選擇走索引地,以上面這語句為例,Oracle實(shí)際走的是table full scan。為什么會(huì)這樣 呢?

這類問題是Oracle不同版本在9.2以后引入了TIMESTAMP才開始出現(xiàn)地。

在 9.2之前,Oracle只有DATE,而沒有TIMESTAMP。在jdbc preparedStatement.setTimestamp時(shí),綁定變量的類型會(huì)被正確的設(shè)置為DATE。而在9.2之后,Oracle開始支持 TIMESTAMP了,這兩者都能支持精度為yyyy-MM-dd hh24:mi:ss的時(shí)間(當(dāng)然TIMESTAMP能支持到納秒級(jí)別),但jdbc driver的api未變同樣在preparedStatement.setTimestamp時(shí),Oracle driver就得選擇到底該把綁定變量的類型設(shè)置為DATE還是TIMESTAMP呢?

估計(jì)是由于TIMESTAMP的精度更高,Oracle 最終默認(rèn)選擇了將綁定變量的類型設(shè)置為了TIMESTAMP。那么這個(gè)時(shí)候,如果面對(duì)實(shí)際屬性為DATE的列,那么就會(huì)導(dǎo)致 Oracle隱式地進(jìn)行形如“TO_TIMESTAMP(date_column) = parameter_timestamp”轉(zhuǎn)換,要 知道Oracle CBO不會(huì)選擇被某函數(shù)作用的列上的索引,除非是函數(shù)索引。

因此,最終也會(huì)導(dǎo)致最上面的情況使用table full scan而不是index range scan。

Oracle就沒有提供別的方法來正確地提供綁定變量嗎?Oracle提供 了幾個(gè)方法來解決這個(gè)問題

1.升級(jí)到11g并使用新的正確的driver api。

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

3.使用V8Compatible flag。

 

以上的相關(guān)內(nèi)容就是對(duì)Oracle不同版本驅(qū)動(dòng)中使用Java Date的問題的介紹,望你有所收獲。

【編輯推薦】

  1. Oracle clob實(shí)際相關(guān)代碼的解析
  2. Oracle存儲(chǔ)過程的返回列表如何以java來調(diào)用
  3. Oracle版本驅(qū)動(dòng)中使用Java Date產(chǎn)生問題的解答
  4. Oracle clob實(shí)際相關(guān)代碼的解析
  5. Oracle數(shù)據(jù)庫備份和恢復(fù)的基本命令
責(zé)任編輯:佚名 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-03-30 13:02:51

Oracle版本

2018-01-08 15:30:18

Linux命令date

2018-06-20 09:39:47

Oracle存儲(chǔ)配置

2023-01-12 11:31:00

K8sToken

2010-10-28 15:38:24

Oracle to_d

2010-04-01 10:55:48

Oracle 數(shù)據(jù)類型

2011-06-20 14:00:26

Qt qmake

2010-03-30 15:54:27

Oracle date

2010-05-05 17:53:39

Oracle 8i

2021-11-11 09:01:01

Helm Chart Kubernetes

2010-04-21 13:21:24

Oracle時(shí)間

2010-03-30 12:30:45

Oracle Hibe

2024-12-17 16:26:31

2021-02-06 17:55:41

微服務(wù)Maven版本控制

2019-06-14 11:15:27

WindowsLinuxWSL

2010-04-23 15:34:41

Oracle 數(shù)據(jù)庫

2022-06-30 13:54:16

BottlesLinuxWindows

2011-09-08 18:34:33

WindowsXP驅(qū)動(dòng)程序

2010-05-06 10:09:44

Oracle in
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)