麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

優(yōu)化JDBC性能的三大技巧

2019-11-17 06:16:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  開發(fā)一個(gè)注重性能的JDBC應(yīng)用程序不是一件輕易的事. 當(dāng)你的代碼運(yùn)行很慢的時(shí)候JDBC驅(qū)動(dòng)程序并不會(huì)拋出異常告訴你。

  本系列的性能提示將為改善JDBC應(yīng)用程序的性能介紹一些基本的指導(dǎo)原則,這其中的原則已經(jīng)被許多現(xiàn)有的JDBC應(yīng)用程序編譯運(yùn)行并驗(yàn)證過(guò)。 這些指導(dǎo)原則包括:

   正確的使用數(shù)據(jù)庫(kù)MetaData方法
   只獲取需要的數(shù)據(jù)
   選用最佳性能的功能
   治理連接和更新

  以下這些一般性原則可以幫助你解決一些公共的JDBC系統(tǒng)的性能問(wèn)題.

  使用數(shù)據(jù)庫(kù)Metadata方法

  因?yàn)橥ㄟ^(guò)ResultSet對(duì)象生成的Metadata方法與其它的JDBCB方法相比是較慢的, 經(jīng)常的使用它們將會(huì)削弱系統(tǒng)的的性能. 本節(jié)的指導(dǎo)原則將幫助你選擇和使用meatdata時(shí)優(yōu)化系統(tǒng)性能.

  少用Metadata方法

  與其它的JDBC方法相比, 由ResultSet對(duì)象生成的metadata對(duì)象的相對(duì)來(lái)說(shuō)是很慢的. 應(yīng)用程序應(yīng)該緩存從ResultSet返回的metadata信息,避免多次不必要的執(zhí)行這個(gè)操作.

  幾乎沒(méi)有哪一個(gè)JDBC應(yīng)用程序不用到metadata,雖然如此,你仍可以通過(guò)少用它們來(lái)改善系統(tǒng)性能. 要返回JDBC規(guī)范規(guī)定的結(jié)果集的所有列信息, 一個(gè)簡(jiǎn)單的metadata的方法調(diào)用可能會(huì)使JDBC驅(qū)動(dòng)程序去執(zhí)行很復(fù)雜的查詢甚至多次查詢?nèi)ト〉眠@些數(shù)據(jù). 這些細(xì)節(jié)上的SQL語(yǔ)言的操作是非常消耗性能的.

  應(yīng)用程序應(yīng)該緩存這些metadata信息. 例如, 程序調(diào)用一次getTypeInfo方法后就將這些程序所依靠的結(jié)果信息緩存. 而任何程序都不大可能用到這些結(jié)果信息中的所有內(nèi)容,所以這些緩存信息應(yīng)該是不難維護(hù)的.

  避免null參數(shù)

  在metadata的方法中使用null參數(shù)或search patterns是很耗時(shí)的. 另外, 額外的查詢會(huì)導(dǎo)致潛在的網(wǎng)絡(luò)交通的增加. 應(yīng)盡可能的提供一些non-null的參數(shù)給metadata方法.

  因?yàn)閙etadata的方法很慢, 應(yīng)用程序要盡可能有效的調(diào)用它們. 許多應(yīng)用程序只傳遞少量的non-null參數(shù)給這些方法.

  例如:

ResultSet WSrs = WSc.getTables (null, null, "WSTable", null);

  應(yīng)該這樣:

ResultSet WSrs = WSc.getTables ("cat1", "johng", "WSTable", "TABLE");

  在第一個(gè)getTables()的調(diào)用中, 程序可能想知道表'WSTable'是否存在. 當(dāng)然, JDBC驅(qū)動(dòng)程序會(huì)逐個(gè)調(diào)用它們并且會(huì)解譯不同的請(qǐng)求. JDBC驅(qū)動(dòng)程序會(huì)解譯請(qǐng)求為: 返回所有的表, 視圖, 系統(tǒng)表, synonyms, 臨時(shí)表, 或存在于任何數(shù)據(jù)庫(kù)類別任何Schema中的任何別名為'WSTable'的對(duì)象.

  第二個(gè)getTables()的調(diào)用會(huì)得到更正確的程序想知道的內(nèi)容. JDBC驅(qū)動(dòng)程序會(huì)解譯這個(gè)請(qǐng)求為: 返回當(dāng)前數(shù)據(jù)庫(kù)類別中所有存在于'johng'這個(gè)schema中的所有表.

  很顯然, JDBC驅(qū)動(dòng)程序處理第二個(gè)請(qǐng)求比處理第一個(gè)請(qǐng)求更有效率一些.

  有時(shí), 你所請(qǐng)求信息中的對(duì)象有些信息是已知的. 當(dāng)調(diào)用metadata方法時(shí), 程序能傳送到驅(qū)動(dòng)程序的的任何有用信息都可以導(dǎo)致性能和可靠性的改善.

  使用'啞元'(dummy)查詢確定表的特性

  要避免使用getColumns()去確定一個(gè)表的特性. 而應(yīng)該使用一個(gè)‘啞元’查詢來(lái)使用getMetadata()方法.

  請(qǐng)考慮這樣一個(gè)程序, 程序中要答應(yīng)用戶選取一些列. 我們是否應(yīng)該使用getColumns()去返回列信息給用戶還是以一個(gè)'啞元'查詢來(lái)調(diào)用getMetadata()方法呢?

  案例 1: GetColumns 方法

ResultSet WSrc = WSc.getColumns (... "UnknownTable" ...);
// getColumns()會(huì)發(fā)出一個(gè)查詢給數(shù)據(jù)庫(kù)系統(tǒng)
. . .
WSrc.next();
string Cname = getString(4);
. . .
// 用戶必須從反復(fù)從服務(wù)器獲取N行數(shù)據(jù)
// N = UnknownTable的列數(shù)
  案例 2: GetMetadata 方法

// 預(yù)備'啞元'查詢
PReparedStatement WSps = WSc.prepareStatement
("SELECT * from UnknownTable WHERE 1 = 0");
// 查詢從來(lái)沒(méi)有被執(zhí)行,只是被預(yù)儲(chǔ)
ResultSetMetaData WSsmd=WSps.getMetaData();
int numcols = WSrsmd.getColumnCount();
...
int ctype = WSrsmd.getColumnType(n)
...
// 獲得了列的完整信息


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品一区在线免费观看 | www.17c亚洲蜜桃 | 美国av片在线观看 | 久久久婷婷一区二区三区不卡 | 国产在线地址 | 草草久久久 | 久久久久久久一区 | 日本成人在线播放 | 国产毛片毛片 | 在线成人免费观看www | 久久精品视频16 | 国产精品呻吟 | 国产亚洲精品久久久久5区 男人天堂免费 | 99精品视频在线 | 黄色大片www | 国产一级免费在线视频 | 久久久久国产成人免费精品免费 | 亚洲精品 在线播放 | 91午夜少妇三级全黄 | 欧美不卡三区 | 欧美日本国产精品 | 天天夜碰日日摸日日澡性色av | 激情五月少妇a | 国产91中文字幕 | 国产亚洲精品久久 | 美女视频黄a视频免费全过程 | 国产成人强伦免费视频网站 | 亚洲男人天堂 | 最新午夜综合福利视频 | 一本色道久久99精品综合蜜臀 | 成年人激情在线 | 久久久青 | 国产亚洲精品影达达兔 | hd性videos意大利复古 | 羞羞电影网 | 性爱网站 | 久久影院国产精品 | 午夜在线观看视频网站 | 久久老司机 | jizzzzxxxxx| 毛片中文字幕 |