国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

索引對(duì)Oracle Database優(yōu)化的探討

2013-12-29 00:00:00邢晨安義
電腦知識(shí)與技術(shù) 2013年13期

摘要:在系統(tǒng)的應(yīng)用過程中,數(shù)據(jù)庫性能問題一直是決策者和技術(shù)人員共同關(guān)注的焦點(diǎn),影響數(shù)據(jù)庫性能的因素有很多,選擇合適的索引能有效地提升查詢性能。在select和where子句的列上創(chuàng)建連接索引,這樣查詢就只會(huì)訪問索引,從而優(yōu)化查詢的性能,提升系統(tǒng)響應(yīng)速度,節(jié)約系統(tǒng)資源。

關(guān)鍵詞:索引;Oracle;優(yōu)化

中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)13-2967-02

在應(yīng)用系統(tǒng)數(shù)據(jù)庫使用初期,由于數(shù)據(jù)量比較小,對(duì)于包含 SELECT、UPDATE、DELETE等語句的各種查詢,復(fù)雜視圖、過程、函數(shù)的編寫,是體會(huì)不出索引在其中起到的重要作用。但是隨著數(shù)據(jù)庫中數(shù)據(jù)的增加,系統(tǒng)的響應(yīng)速度就成為目前數(shù)據(jù)庫需要解決的重要問題。這個(gè)時(shí)候索引對(duì)查詢數(shù)據(jù)的優(yōu)化作用就體現(xiàn)出來了。

Oracle提供了大量索引選項(xiàng),知道在給定條件下使用哪個(gè)選項(xiàng)對(duì)于一個(gè)應(yīng)用程序的性能來說非常重要。一個(gè)錯(cuò)誤的選擇可能會(huì)引發(fā)死鎖,并導(dǎo)致數(shù)據(jù)庫性能急劇下降或進(jìn)程終止。而如果做出正確的選擇,則可以合理使用資源,使那些已經(jīng)運(yùn)行了幾個(gè)小時(shí)甚至幾天的進(jìn)程在幾分鐘內(nèi)得以完成,成就感和喜悅感油然而生。

1 基本的索引概念

與書的索引一樣,數(shù)據(jù)庫索引能夠快速找到表或索引視圖中的特定數(shù)據(jù)信息。當(dāng)從表中訪問數(shù)據(jù)的時(shí)候,Oracle提供了兩個(gè)選擇:全表掃描,讀取表中每一行數(shù)據(jù),或者通過ROWID一次讀取一行數(shù)據(jù)。當(dāng)訪問大型表的少量行時(shí),使用索引就能辦到。索引包含從表或視圖中一個(gè)或多個(gè)列生成的鍵,以及映射到指定數(shù)據(jù)的存儲(chǔ)位置的指針。通過創(chuàng)建設(shè)計(jì)良好的索引以支持查詢,可以顯著提高數(shù)據(jù)庫查詢和應(yīng)用程序的性能。索引可以減少為返回查詢結(jié)果集而必須讀取的數(shù)據(jù)量。索引還可以強(qiáng)制表中的行具有唯一性,從而確保表數(shù)據(jù)的完整性。設(shè)計(jì)良好的索引可以減少磁盤I/O操作,并且消耗的系統(tǒng)資源也較少,從而可以提高查詢性能。對(duì)于SQL語句的各種查詢,索引會(huì)很有用。

Oracle中索引的種類繁多,下面就介紹一下索引的類型:

1)B樹索引:B樹索引是一個(gè)通用索引,可以是一個(gè)列的簡(jiǎn)單索引,也可以是多個(gè)列的符合索引,在創(chuàng)建索引時(shí)它就是默認(rèn)的索引類型。

2)位圖索引:位圖索引非常適合于決策支持系統(tǒng)(Decision Support System,DSS)和數(shù)據(jù)倉庫,不應(yīng)該用于通過事物處理應(yīng)用程序訪問的表。它可以使用較少到中等基數(shù)的列訪問非常大的表。

3)HASH索引:使用HASH索引必須要使用HASH集群。建立一個(gè)集群或HASH集群的同時(shí),也就定義了一個(gè)集群鍵,所有與這個(gè)集群鍵相關(guān)的行都被存儲(chǔ)在一個(gè)數(shù)據(jù)庫塊上,Oracle可以通過執(zhí)行一個(gè)HASH函數(shù)和I/O來訪問數(shù)據(jù)。通常,HASH對(duì)于包含有序值的靜態(tài)數(shù)據(jù)非常有效。

4)索引組織表:索引組織表會(huì)把表的儲(chǔ)存結(jié)構(gòu)改成B樹結(jié)構(gòu),以表的主鍵進(jìn)行排序。這種特殊的表和其他類型的表一樣,可以在表上執(zhí)行所有的DML和DDL語句。由于表的特殊結(jié)構(gòu),ROWID并沒有被關(guān)聯(lián)到表的行上。對(duì)于總是通過主鍵的精確匹配或范圍掃描進(jìn)行訪問的表,就需要考慮使用索引組織表。

5)反轉(zhuǎn)鍵索引:反轉(zhuǎn)鍵索引儲(chǔ)存數(shù)據(jù)時(shí),被儲(chǔ)存的數(shù)據(jù)值就會(huì)與原先儲(chǔ)存的數(shù)據(jù)值相反,結(jié)果就是索引會(huì)為每次新插入的行更新不同的索引塊。使用反轉(zhuǎn)鍵索引能夠解決在數(shù)據(jù)載入期間,因某部分索引和磁盤比其他部分使用頻繁,索引碰到的與I/O相關(guān)的一些瓶頸問題。

6)基于函數(shù)的索引:在表中創(chuàng)建基于函數(shù)的索引,就允許索引訪問支持基于函數(shù)的列或數(shù)據(jù),在列上執(zhí)行了函數(shù)的查詢都能使用這個(gè)列的索引。

7)分區(qū)索引:分區(qū)索引就是簡(jiǎn)單地把一個(gè)索引分成多個(gè)片斷。這樣可以訪問更小的片斷,速度也更快,并且還可以把這些片斷分別存放在不同的磁盤驅(qū)動(dòng)器上。分區(qū)索引分為兩種類PNuN1iiBX1olShHuvNW/GA==型:本地分區(qū)索引和全局分區(qū)索引。

8)位圖連接索引:位圖連接索引是基于兩個(gè)表的鏈接的位圖索引,在數(shù)據(jù)倉庫環(huán)境中使用這種索引能夠改進(jìn)連接維度表和事實(shí)表的查詢性能。創(chuàng)建位圖連接索引后,當(dāng)用戶再一次查詢中結(jié)合查詢事件表和維度表時(shí),就不需要執(zhí)行連接,因?yàn)樵谖粓D連接索引中已經(jīng)有可用的鏈接結(jié)果。通過壓縮位圖連接索引中的ROWID能夠進(jìn)一步改進(jìn)性能,也能夠減少訪問數(shù)據(jù)所需的I/O數(shù)量。

2 調(diào)整查詢優(yōu)化Oracle Database

V$SQLAREA和V$SQL是很重要的視圖,可以用來查找執(zhí)行情況最差的SQL語句,而V$SESSMETRIC和DBA_HIST_SQLSTATS視圖則可以選出當(dāng)前最占資源的會(huì)話以及查詢。正確使用索引可以調(diào)整這些查詢,優(yōu)化Oracle Database。

3)成果檢驗(yàn)

此次實(shí)驗(yàn)通過在三個(gè)不同情況下運(yùn)行同一SQL語句所需時(shí)間做對(duì)比,反應(yīng)出不同情況下,運(yùn)行同一SQL語句的優(yōu)劣。第一次運(yùn)行SQL語句時(shí),沒有創(chuàng)建索引,顯然查詢耗費(fèi)了大量的時(shí)間運(yùn)行;第二次運(yùn)行SQL語句時(shí),建立了一個(gè)不合適的索引,查詢耗費(fèi)的時(shí)間超過了沒有創(chuàng)建索引的時(shí)候,情況變得更糟了;第三次運(yùn)行SQL語句時(shí),為select和where子句中的列建立了連接索引,查詢耗時(shí)相當(dāng)?shù)纳?,達(dá)到了優(yōu)化查詢性能的目的。

通過此次實(shí)驗(yàn)不難看出,對(duì)于系統(tǒng)中很關(guān)鍵的查詢,可以考慮在select和where子句的列上創(chuàng)建連接索引,這樣查詢就只會(huì)訪問索引,從而優(yōu)化查詢的性能,提升系統(tǒng)響應(yīng)速度,節(jié)約系統(tǒng)資源。

3 結(jié)束語

對(duì)于Oracle Database優(yōu)化的研究,索引的優(yōu)化僅僅是一個(gè)方面,對(duì)select和where子句中的列使用索引,也只是某些情況下優(yōu)化查詢性能的一種方法,只有選擇合適的優(yōu)化方法才能最大限度的提升系統(tǒng)性能,還有更多更加有效地優(yōu)化方法等待大家的探索和研究。

參考文獻(xiàn):

[1] 孫風(fēng)棟.Oracle 10g數(shù)據(jù)庫基礎(chǔ)教程 [M]. 2版.北京:電子工業(yè)出版社, 2012.

[2] (美)尼米克(Niemiec,R.J.). Oracle Database 10g性能調(diào)整與優(yōu)化[M]. 薛瑩,譯.北京:清華大學(xué)出版社,2009.

汶川县| 绵阳市| 江华| 东辽县| 裕民县| 孝感市| 鄂托克旗| 从化市| 绥芬河市| 沙田区| 南投市| 松江区| 长岛县| 西峡县| 绵竹市| 富源县| 杂多县| 阿坝| 蓬溪县| 兰溪市| 浦东新区| 托里县| 琼海市| 萍乡市| 新蔡县| 兰溪市| 资阳市| 县级市| 嘉黎县| 肇源县| 梁河县| 苏尼特左旗| 普兰店市| 汝阳县| 宁陕县| 台湾省| 罗田县| 南岸区| 米易县| 筠连县| 高密市|