DB2 V9.7 分區(qū)索引新特征之改進(jìn)大型數(shù)據(jù)庫(kù)
此文章主要向大家描述的是DB2 V9.7 分區(qū)索引新特性之改進(jìn)大型數(shù)據(jù)庫(kù)的實(shí)際操作性能的描述,其中主要包括如何正確的使用與管理分區(qū)索引,還有分區(qū)索引改進(jìn)大型數(shù)據(jù)庫(kù)性能的實(shí)際操作步驟。
簡(jiǎn)介
分區(qū)索引(partitioned index)是 DB2 V9.7 中的新特性,在本文中將介紹什么是分區(qū)索引,如何創(chuàng)建和管理DB2 V9.7 分區(qū)索引,分區(qū)索引如何改進(jìn)大型數(shù)據(jù)庫(kù)性能,讀者將獲得對(duì)分區(qū)索引的***手體驗(yàn)。每個(gè)DB2 V9.7 分區(qū)索引由多個(gè)索引分區(qū)(index partition)組成,每個(gè)索引分區(qū)只對(duì)相應(yīng)的數(shù)據(jù)分區(qū)(data partition)的數(shù)據(jù)作索引。
開(kāi)始之前
在開(kāi)始討論分區(qū)索引之前我們有必要復(fù)習(xí)一下 DB2 的表分區(qū)特性,這一特性是在 DB2 V9 引入的,developerworks 上的這篇文章 “ DB2 9 表分區(qū) - 改進(jìn)大型數(shù)據(jù)庫(kù)的管理” 是一個(gè)很好的參考。
表分區(qū)是一種數(shù)據(jù)組織模式,在這種模式中,數(shù)據(jù)將以一個(gè)或多個(gè)表列的值為依據(jù),分割到多個(gè)稱(chēng)為數(shù)據(jù)分區(qū)(或范圍)的存儲(chǔ)對(duì)象中。每一個(gè)數(shù)據(jù)分區(qū)被分別存儲(chǔ)。這些存儲(chǔ)對(duì)象可以位于不同的表空間中,可以位于相同的表空間中,也可能是這兩種情況的組合。
表分區(qū)特性改進(jìn)了大型數(shù)據(jù)庫(kù)的管理,用戶(hù)可以靈活的放置索引,在圖 1 中,在分區(qū)表上建立了兩個(gè)索引,每個(gè)索引分別放置在一個(gè)表空間中。但是我們同時(shí)也看到,每一個(gè)索引中的鍵值指向了所有數(shù)據(jù)分區(qū)的數(shù)據(jù)庫(kù),在表數(shù)據(jù)量很大的情況索引也會(huì)變得很大。
圖 1. DB2 v9 中表分區(qū)特性及其索引
另外,表分區(qū)特性使得用戶(hù)可以使用 ALTER TABLE … ATTACH PARTITION 命令和 DETACH PARTITION 命令輕易的實(shí)現(xiàn)表數(shù)據(jù)的轉(zhuǎn)入( roll-in )和轉(zhuǎn)出( roll-out) ,這兩個(gè)操作都不需要有任何數(shù)據(jù)的移動(dòng),從而很大的提高性能。同時(shí)我們也看到,這兩個(gè)操作之后需要對(duì)索引進(jìn)行維護(hù),例如 ATTACH 一個(gè)新的分區(qū)之后需要為這個(gè)分區(qū)的新數(shù)據(jù)進(jìn)行索引, DETACH 一個(gè)分區(qū)之后需要將索引中相應(yīng)的鍵值清除。
分區(qū)索引簡(jiǎn)介
在 DB2 V9.7 之前,分區(qū)表上的索引是不能分區(qū)的。由于分區(qū)表很多情況都是應(yīng)用在數(shù)據(jù)倉(cāng)庫(kù)環(huán)境中,當(dāng)數(shù)據(jù)量很大的時(shí)候,索引也隨之變得很大,從而導(dǎo)致一些的性能上降低。
在 DB2 V9.7 中,索引也可以是分區(qū)的,這一特性稱(chēng)之為分區(qū)索引(partitioned index)。DB2 V9.7 分區(qū)索引由多個(gè)索引分區(qū)(index partition)組成,每個(gè)索引分區(qū)中的鍵值指向相應(yīng)的***一個(gè)數(shù)據(jù)分區(qū)(data partition)的數(shù)據(jù),系統(tǒng)創(chuàng)建的索引或者用戶(hù)的創(chuàng)建的索引都可以是分區(qū)索引。
在圖 2 中,在一個(gè)有 4 個(gè)數(shù)據(jù)分區(qū)的分區(qū)表上建立了三個(gè)索引,其中 index1 和 index2 是分區(qū)索引,分別由 4 個(gè)索引分區(qū)組成,index3 是非分區(qū)索引(nonpartitioned index),或者稱(chēng)之為全局索引(global index),相對(duì)應(yīng)的,我們可以把分區(qū)索引稱(chēng)為本地索引(local index)。
圖 2. DB2 V9.7 中的分區(qū)索引
分區(qū)索引帶來(lái)的一個(gè)顯著優(yōu)勢(shì)在于,在使用 ALTER TABLE ATTACH PARTITION 和 DETAICH PARTITION 命令進(jìn)行數(shù)據(jù)的轉(zhuǎn)入( roll-in )和轉(zhuǎn)出( roll-out) 時(shí), 使用分區(qū)索引能夠很大程度的提高性能。
在 DB2 V9.7 中,以下類(lèi)型的索引不能是分區(qū)索引,只能是非DB2 V9.7 分區(qū)索引。
XML 索引
空間數(shù)據(jù)( spatial data )索引
MDC 塊索引( block index ,系統(tǒng)生成索引)
XML path index (系統(tǒng)生成索引)
準(zhǔn)備工作
在開(kāi)始之前,我們先創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)名字叫做 MYDB,如清單 1 所示。當(dāng)然用已經(jīng)存在的數(shù)據(jù)庫(kù)也可以,但是為了能夠簡(jiǎn)化環(huán)境,清楚的、逐步的進(jìn)行我們接下來(lái)的討論,建議使用一個(gè)全新的數(shù)據(jù)庫(kù)。
本文中所有操作都是在 LinuxAMD64 平臺(tái)上的 DB2 V97 版本進(jìn)行,V97 版本之前的版本都沒(méi)有DB2 V9.7 分區(qū)索引特性。
清單 1. 創(chuàng)建數(shù)據(jù)庫(kù)
db2 CREATE DB mydb
創(chuàng)建數(shù)據(jù)庫(kù)之后我們創(chuàng)建若干個(gè)表空間,如清單 2 所示。
清單 2. 創(chuàng)建表空間
- CREATE TABLESPACE TbspT MANAGED BY DATABASE using (FILE 'tspT' 4 M) AUTORESIZE YES;
- CREATE TABLESPACE TbspX MANAGED BY DATABASE using (FILE 'tspX' 4 M) AUTORESIZE YES;
- CREATE TABLESPACE TbspD MANAGED BY DATABASE using (FILE 'tspD' 4 M) AUTORESIZE YES;
- CREATE TABLESPACE TbspY MANAGED BY DATABASE using (FILE 'tspY' 4 M) AUTORESIZE YES;
- CREATE TABLESPACE TbspW MANAGED BY DATABASE using (FILE 'tspW' 4 M) AUTORESIZE YES;
完整內(nèi)容的學(xué)習(xí),請(qǐng)?jiān)L問(wèn):
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0907haoqy/
【編輯推薦】