成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle編程高手箴言,位圖索引的story

數(shù)據(jù)庫(kù) Oracle
本文主要向你介紹的是Oracle編程高手中的高手的箴言即位圖索引的story,你如果是Oracle編程的瘋狂一族的話,以下的文章,你一定不要錯(cuò)過(guò)。

我想熟悉Oracle數(shù)據(jù)庫(kù)的人,一般對(duì)這位Oracle高手中的高手編著的《ExpertOracleDatabaseArchitecture-9iand10gprogrammingTechniquesandSolutions》,有所了解吧!同時(shí)我也建議大家有時(shí)間的話,翻閱一下這本書(shū),會(huì)對(duì)你在Oracle數(shù)據(jù)庫(kù)的學(xué)習(xí)有很大的幫助。

如果您有時(shí)間和興趣,強(qiáng)烈建議您閱讀這本書(shū)。這本書(shū)最大的特點(diǎn)是語(yǔ)言生動(dòng)活潑,說(shuō)理清楚,幾乎每講解一個(gè)原理,作者都給出了具體實(shí)例,讓人讀起來(lái)毫不氣悶。

另外,Thomas謙遜的態(tài)度讓我非常佩服,Thomas在Oracle數(shù)據(jù)庫(kù)方面工作了16年,并且參與了早期Oracle版本的開(kāi)發(fā),但他仍然謙虛地說(shuō),他每天都能從Oracle文檔里學(xué)到新的東西。

下面從這本書(shū)里摘錄了一些精彩片段,供您欣賞,雖然不免有斷章取義之嫌。

位圖索引(BitmapIndex)的故事

一日,一群Java開(kāi)發(fā)者找到Tom先生,說(shuō)他們新開(kāi)發(fā)的系統(tǒng)已經(jīng)上線,但性能及其低下,他們問(wèn)Tom先生能不能替他們看看問(wèn)題到底出在什么地方。他們告訴Tom,他們的系統(tǒng)采用JSP+EJB+Oracle編程的典型三層架構(gòu),其中EJB中的SQL是由第三方工具產(chǎn)生的。

Tom同志一聽(tīng)到EJB,就知道這個(gè)系統(tǒng)是不能采用SQL代碼跟蹤的方法來(lái)進(jìn)行性能調(diào)優(yōu)了。于是,Tom同志告訴這些心急火燎的Java開(kāi)發(fā)者,你們系統(tǒng)的問(wèn)題肯定在瀏覽器到數(shù)據(jù)庫(kù)之間,但具體問(wèn)題出在什么地方,我需要看看你們的數(shù)據(jù)庫(kù)。

于是,Tom同志遠(yuǎn)程連接到他們的測(cè)試數(shù)據(jù)庫(kù)(注意不是生產(chǎn)數(shù)據(jù)庫(kù)),查看了幾個(gè)動(dòng)態(tài)性能視圖(V$LOCK和V$SQL),最后終于發(fā)現(xiàn)了問(wèn)題的所在。Tom同志發(fā)現(xiàn)他們的數(shù)據(jù)庫(kù)中有一個(gè)位圖索引(BitmapIndex)最為可疑,這個(gè)索引是建立在一個(gè)PROCESS_FLAG的字段上,PROCESS_FLAG字段表示該記錄是否被處理了,可能值只有兩個(gè),一個(gè)是未處理(N),一個(gè)是已經(jīng)處理(Y)。

當(dāng)記錄初次插入數(shù)據(jù)庫(kù)時(shí),該字段的值為N,但其它進(jìn)程讀取并處理那些未處理的記錄(值為N的記錄)后,這個(gè)字段的值就更新為Y。

Tom就問(wèn)這些Java開(kāi)發(fā)者,你們?yōu)槭裁匆谶@個(gè)PROCESS_FLAG字段上建立位圖索引呢?

其中有一個(gè)開(kāi)發(fā)者振振有詞的說(shuō),這是為了提高查找速度,一旦建立了位圖索引,我們的程序就能快速找到那些數(shù)值為N的記錄,然后處理。隨后,他又拿出一本大部頭的Oracle數(shù)據(jù)庫(kù)參考手冊(cè),對(duì)Tom同志說(shuō),這書(shū)上都是這么說(shuō)的,對(duì)那些數(shù)值非常少的字段,比如,我們的PROCESS_FLAG字段只有兩個(gè)值,就應(yīng)該建立位圖索引,這難道有什么問(wèn)題嗎?

Tom同志微微一笑,沒(méi)有直接回答。只見(jiàn)他打開(kāi)SQLPlus,連接到他的本地Oracle編程實(shí)例,給這群開(kāi)發(fā)者演示了下面及其簡(jiǎn)單的SQL代碼。

 

  1. C:\DocumentsandSettings\carlwu>sqlplusscott/
    tiger@carlSQL*Plus:Release11.1.0.6.0
    -ProductiononWedApr2318:15:342008  
  2. Copyright(c)1982,2007,Oracle.Allrightsreserved.  
  3. Connectedto:  
  4. OracleDatabase11gEnterpriseEditionRelease
    11.1.0.6.0-Production  
  5. WiththePartitioning,OLAP,
    DataMiningandRealApplicationTestingoptions  
  6. SQL>createtablet(processed_flagvarchar2(1));  
  7. Tablecreated.  
  8. SQL>createbitmapindext_idxont(processed_flag);  
  9. Indexcreated.  
  10. SQL>insertintotvalues('N');  
  11. 1rowcreated.  
  12. SQL>    

 

剛才那位振振有詞的開(kāi)發(fā)者不服氣的說(shuō),這有什么,不是很正常嗎?接著Tom又打開(kāi)了一個(gè)SQLPlus窗口,并連接到本地?cái)?shù)據(jù)庫(kù),鍵入下面的SQL語(yǔ)句,奇怪的是這條SQL并不執(zhí)行,而是一直在等待。下面是這條SQL的一個(gè)截圖,

  1. '800')this.width='800';if(this.height>'600')this.height='600';"border=0> 

這些Java開(kāi)發(fā)者看到這里,驚訝得目瞪口呆。其中一個(gè)開(kāi)發(fā)者猶豫地說(shuō),好象這個(gè)位圖索引只允許一個(gè)用戶操作,如果其它用戶想同時(shí)操作這個(gè)索引,那他必須等第一個(gè)用戶的請(qǐng)求處理完成,并且提交之后,才能進(jìn)行,如果第一個(gè)用戶不提交,那么他必須一直等待。Tom點(diǎn)頭表示贊同,然后給他們作了一番詳細(xì)的解釋:

Oracle數(shù)據(jù)庫(kù)的位圖索引(BitmapIndex)確實(shí)是針對(duì)那些數(shù)值稀疏(low-cardinality,低基數(shù))的字段,但是還應(yīng)記住的一點(diǎn)是,它是針對(duì)那些值不經(jīng)常改變的字段的。在實(shí)際應(yīng)用中,如果某個(gè)字段的值需要頻繁更新,那么就不適合在它上面創(chuàng)建位圖索引。

在位圖索引中,如果你更新或插入其中一條數(shù)值為N的記錄,那么相應(yīng)表中數(shù)值為N的記錄(可能成百上千條)全部被Oracle編程鎖定,這就意味著其它用戶不能同時(shí)更新這些數(shù)值為N的記錄,其它用戶必須要等第一個(gè)用戶提交后,才能獲得鎖,更新或插入數(shù)據(jù)。

問(wèn)題找到了,修正就很簡(jiǎn)單了,Tom建議這些開(kāi)發(fā)者去掉了這個(gè)位圖索引,然后在PROCESS_FLAG字段上建立一個(gè)函數(shù)索引,只為那些數(shù)值為N的記錄建立簡(jiǎn)單的B樹(shù)索引就可以了。這些開(kāi)發(fā)者回去后,按照Tom的指點(diǎn),經(jīng)過(guò)一番測(cè)試,終于解決了問(wèn)題。

但故事并沒(méi)有到此結(jié)束,這些開(kāi)發(fā)者并不滿足,他們給Tom寫(xiě)email抱怨道,Oracle數(shù)據(jù)庫(kù)真“爛”,連這個(gè)簡(jiǎn)單的位圖索引問(wèn)題都不能處理,你看,Oracle浪費(fèi)了我們大量的時(shí)間和精力調(diào)試我們的Java程序。是他們就認(rèn)定,數(shù)據(jù)庫(kù)B真爛。但事實(shí)并非如此,這只是因?yàn)閿?shù)據(jù)庫(kù)B的工作方式和原理不同于數(shù)據(jù)庫(kù)A而已。

世界上沒(méi)有哪個(gè)數(shù)據(jù)庫(kù)是“爛”數(shù)據(jù)庫(kù),關(guān)鍵是我們必須深入了解該數(shù)據(jù)庫(kù)的架構(gòu)和特點(diǎn),這樣才能避免這類問(wèn)題。如果您理解位圖索引的適用條件,您還會(huì)說(shuō)Oracle是一個(gè)很“爛“的數(shù)據(jù)庫(kù)嗎?)

最后,Tom乘機(jī)建議他們,如果你們?cè)敢猓铱梢越o你們做一次簡(jiǎn)單的為期3天的培訓(xùn)。這些Java程序員聽(tīng)從了Tom同志的建議,經(jīng)過(guò)了3天的培訓(xùn)后,他們對(duì)Oracle能做的事情表示吃驚,他們紛紛表示,“我真傻,原來(lái)Oracle編程不適合建立臨時(shí)表呀,你看我的程序老是在那里刪除和創(chuàng)建臨時(shí)表。”,“要是我用了物化視圖(MateralizedView),我的數(shù)據(jù)備份代碼就異常簡(jiǎn)單了。”,“我還不知道connectby有這么強(qiáng)大的功能呢!”。

【編輯推薦】

  1. Oracle to_char函數(shù)具有強(qiáng)大功能的體現(xiàn)
  2. Oracle數(shù)據(jù)庫(kù)LogMiner工具的運(yùn)用
  3. Oracle 11g調(diào)用函數(shù)的五種方法簡(jiǎn)介
  4. Oracle性能調(diào)整中的相關(guān)要點(diǎn)的介紹
  5. 惠普郵件歸檔平臺(tái)運(yùn)用存儲(chǔ)網(wǎng)格技術(shù)
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2009-04-10 14:38:17

Oracle高手位圖索引

2021-08-27 22:07:55

Oracle索引位圖

2010-04-07 17:56:49

Oracle位圖索引

2009-11-11 09:13:11

Oracle索引掃描

2013-10-31 09:36:43

程序員程序高手

2015-07-28 17:11:00

編程技術(shù)提升

2009-11-17 10:20:01

Oracle Spat

2009-11-17 15:59:25

Oracle物化視圖

2011-05-30 15:59:47

編程

2010-10-26 17:34:03

Oracle索引

2009-10-29 16:57:05

Oracle傳輸表空間

2010-10-27 13:47:50

Oracle索引

2010-10-26 16:33:54

創(chuàng)建Oracle索引

2010-11-16 09:18:39

oracle重建索引

2010-04-07 17:45:22

Oracle位圖索引

2022-03-29 08:18:32

位圖算法索引技術(shù)

2009-11-02 18:56:49

調(diào)整Oracle數(shù)據(jù)庫(kù)

2011-05-20 11:33:06

ORACLE索引約束

2009-03-19 15:52:50

Silverlight位圖WPF

2010-10-26 17:17:37

創(chuàng)建ORACLE索引
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 在线看一区二区 | 电影91久久久 | 黄网站涩免费蜜桃网站 | 日韩精品在线免费观看视频 | 一区二区三区精品在线 | 一区二区三区四区视频 | 日韩久久久久久 | 亚洲免费一区二区 | 91国产精品在线 | 欧美亚洲第一区 | 亚洲成av人片在线观看 | 中文字幕免费在线 | 国内精品视频免费观看 | 三区四区在线观看 | 在线观看亚洲欧美 | 亚洲福利网站 | 欧美黑人又粗大 | 午夜影院| 性一交一乱一透一a级 | 国产精品一区二区电影 | 九九久久精品 | 国产欧美日韩精品一区二区三区 | h肉视频 | 国产精品不卡一区 | www97影院 | 精品国产18久久久久久二百 | 香蕉久久av | 久久久久久久久久久久一区二区 | 亚洲精品一区在线观看 | 理论片87福利理论电影 | 国产高清视频一区 | 91精品国产综合久久福利软件 | 婷婷精品| 成人精品久久 | 午夜私人影院 | 色网在线看 | 久久久久国产精品www | 91视频久久久久 | 久久久国产一区二区三区 | av资源网站 | 黄免费观看视频 |