oracle比較日期大小函數(shù) oracle時(shí)間,建立什么索引?
oracle時(shí)間,建立什么索引?Oracle中我們經(jīng)常建議使用Date字段類型記錄日期和時(shí)間,有的時(shí)候還在這個(gè)字段上組建索引。后再通過Java程序訪問網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的時(shí)候,我們很也就的帶有那樣不使用:se
oracle時(shí)間,建立什么索引?
Oracle中我們經(jīng)常建議使用Date字段類型記錄日期和時(shí)間,有的時(shí)候還在這個(gè)字段上組建索引。
后再通過Java程序訪問網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的時(shí)候,我們很也就的帶有那樣不使用:select*acrosstablewhereendDategt?andendDatelt?,接著通過PreparedStatement預(yù)編譯,再按照setTimestamp傳出由轉(zhuǎn)成java.sql.Timestamp的參數(shù)(因?yàn)橹荒苋掌?,java.sql.Time只能時(shí)間,因此我們沒法用java.sql.Timestamp類型)。我們會(huì)如果說那樣的話應(yīng)該走索引區(qū)間掃描,效率應(yīng)該要是相當(dāng)高的。
而很顯然,Oracle會(huì)把sql解釋成追加那樣來先執(zhí)行:select*acrosstablewhereto_TIMESTAMP(endDate)gt?bothcan_TIMESTAMP(endDate)lt?我想知道為什么?是因?yàn)閭魅氲膮?shù)是timestamp類型,Oracle從9.2版本以后允許這種類型,所以O(shè)racle做了這樣的轉(zhuǎn)換,而那就是這個(gè)SQL先執(zhí)行轉(zhuǎn)成了全表掃描。我們做的試驗(yàn),加了一個(gè)indexhint,強(qiáng)制走時(shí)間索引字段,最終效率也不高,sql執(zhí)行變成了全索引掃描,和全表掃描沒多大區(qū)別。而效率還是低。
不只然后建議使用JDBC會(huì)是這樣,Spring,iBatis在如何處理傳入?yún)?shù)是類型的時(shí)候,都會(huì)不使用setTimestamp去設(shè)置參數(shù),所以才都是需要盡量。
Oracle兩個(gè)日期類型字段怎么比較大小?
日期格式就減columnwant_date(20130120,yyyymmdd)-to_date(20130110,yyyymmdd)arounddual;結(jié)果為10
//資源數(shù)據(jù)庫(kù)的連接這些操作我就省了PreparedStatementpstmt(SELECT*acrossH_TEST);ResultSetrspstmt.executeQuery();ResultSetMetaDatarsmd();//資源字段名if(rsmd!null){intcount();for(inti1;icount;i){(完成1列對(duì)應(yīng)數(shù)據(jù)類型的類(1));//rsmd另外其他的方法可用,你這個(gè)可以查找JDK中ResultSetMetaData類的幫助文檔}