術(shù)中所采用的數(shù)據(jù)分組方式,往往會(huì)將同一個(gè)時(shí)間階段的數(shù)據(jù)分開,例如,將熱點(diǎn)數(shù)據(jù)和非熱點(diǎn)數(shù)據(jù)分開,分別創(chuàng)建索引。然而同一時(shí)間階段的數(shù)據(jù)索引結(jié)構(gòu)基本相同,例如熱點(diǎn)數(shù)據(jù)和非熱點(diǎn)數(shù)據(jù)的索引結(jié)構(gòu)基本相同,采用本發(fā)明上述實(shí)施例所提供的方法,可以從依據(jù)數(shù)據(jù)生命周期對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)所做出的分組中選擇目標(biāo)組,得到滿足過(guò)濾條件的表數(shù)據(jù),再建立對(duì)應(yīng)的索引,有利于對(duì)索引結(jié)構(gòu)相同的不同類型數(shù)據(jù)創(chuàng)建統(tǒng)一的索引,進(jìn)而在處理大數(shù)據(jù)的過(guò)程中具有更高的效率。
[0076]上述分析用戶需求可以是分析用戶訪問(wèn)數(shù)據(jù)庫(kù)時(shí),相應(yīng)的SQL查詢語(yǔ)句中的查詢條件。
[0077]采用本發(fā)明所提供的方法,數(shù)據(jù)庫(kù)研發(fā)人員根據(jù)實(shí)際需要,通過(guò)用戶需求,確定索引的篩選條件,建立相應(yīng)的索引,不再需要將冷熱數(shù)據(jù)從表中分開,也沒(méi)有數(shù)據(jù)遷移,數(shù)據(jù)庫(kù)設(shè)計(jì)將更加合理。
[0078]不同時(shí)間范圍內(nèi)的數(shù)據(jù),用戶具有不同的操作需求,需要對(duì)索引進(jìn)行相應(yīng)修改。針對(duì)于此,在本發(fā)明的另一些實(shí)施例中,本發(fā)明提供的數(shù)據(jù)索引創(chuàng)建方法,還包括在表數(shù)據(jù)生命周期的不同階段對(duì)索引進(jìn)行管理:依據(jù)目標(biāo)表數(shù)據(jù)在所述數(shù)據(jù)生命周期對(duì)應(yīng)的階段變動(dòng),對(duì)所述索引進(jìn)行更改。具體的,例如,狀態(tài)字段上建立的索引往往是用于查詢操作狀態(tài)和更新的;若歷史數(shù)據(jù)沒(méi)有更新,就不再需要狀態(tài)字段上的索引,需要將相應(yīng)的索引數(shù)據(jù)刪除。再如,如果用戶不再關(guān)心一年以上的超期數(shù)據(jù),需要?jiǎng)h除一年范圍之前的索引。
[0079]在一些實(shí)施例中,所述數(shù)據(jù)過(guò)濾條件通過(guò)where語(yǔ)句實(shí)現(xiàn)。
[0080]在當(dāng)前SQL語(yǔ)法中,where是數(shù)據(jù)庫(kù)中的一個(gè)指令,用于規(guī)定選擇的條件,應(yīng)用于select (選擇)、delete (刪除)、update(更新)語(yǔ)句中。本發(fā)明實(shí)施例在創(chuàng)建索引的語(yǔ)句中,數(shù)據(jù)過(guò)濾條件通過(guò)where語(yǔ)句實(shí)現(xiàn);也就是說(shuō),通過(guò)執(zhí)行相應(yīng)的where語(yǔ)句,對(duì)目標(biāo)表數(shù)據(jù)進(jìn)行過(guò)濾。
[0081]更具體的,所述where語(yǔ)句包括where指令和條件表達(dá)式。所述條件表達(dá)式可以由列、常量和運(yùn)算符等組合而成。
[0082]進(jìn)一步,所述where語(yǔ)句可以設(shè)置于當(dāng)前SQL創(chuàng)建索引語(yǔ)句的末端。
[0083]為了避免數(shù)據(jù)庫(kù)研發(fā)人員濫用where語(yǔ)句帶來(lái)的負(fù)面效果,在本發(fā)明的一些實(shí)施例中,所述數(shù)據(jù)過(guò)濾條件通過(guò)包含范圍單詞的語(yǔ)句實(shí)現(xiàn)。所述范圍單詞可以是range指令、或before指令等。
[0084]為了避免數(shù)據(jù)庫(kù)研發(fā)人員濫用where語(yǔ)句帶來(lái)的負(fù)面效果,在本發(fā)明的一些實(shí)施例中,所述數(shù)據(jù)過(guò)濾條件還通過(guò)包含列表單詞的語(yǔ)句實(shí)現(xiàn)。所述列表單詞可以是list指令。
[0085]在本發(fā)明的一種優(yōu)選實(shí)施例中,所述數(shù)據(jù)索引創(chuàng)建方法包括如圖3所示的步驟:
[0086]步驟301:接收用戶創(chuàng)建索引的指令。
[0087]所述創(chuàng)建索引的指令,包括創(chuàng)建索引的SQL指令。
[0088]步驟302:從所述創(chuàng)建索引的指令中獲取數(shù)據(jù)過(guò)濾條件。
[0089]步驟303:讀取目標(biāo)表數(shù)據(jù)。作為一個(gè)實(shí)施例,目標(biāo)表數(shù)據(jù)指創(chuàng)建索引的指令所對(duì)應(yīng)的數(shù)據(jù)庫(kù)中的表數(shù)據(jù)。
[0090]步驟304:判斷所讀取的目標(biāo)表數(shù)據(jù)是否滿足所述數(shù)據(jù)過(guò)濾條件;若是,則執(zhí)行下一步驟;若否,則執(zhí)行步驟307。
[0091]步驟305:對(duì)目標(biāo)表數(shù)據(jù)進(jìn)行計(jì)算,得到索引數(shù)據(jù)。
[0092]步驟306:將所述索引數(shù)據(jù)寫入索引上相應(yīng)的指針位置。
[0093]步驟307:判斷數(shù)據(jù)庫(kù)中是否存在未讀取的目標(biāo)表數(shù)據(jù);若是,進(jìn)入步驟408 ;若否,返回步驟303。
[0094]步驟308:結(jié)束。
[0095]進(jìn)一步,本發(fā)明還提供一種數(shù)據(jù)索引創(chuàng)建裝置,如圖4所示,至少包括:
[0096]數(shù)據(jù)過(guò)濾條件獲取模塊:用于獲取數(shù)據(jù)過(guò)濾條件;
[0097]索引創(chuàng)建模塊:用于根據(jù)所述數(shù)據(jù)過(guò)濾條件,對(duì)目標(biāo)表數(shù)據(jù)進(jìn)行篩選得到滿足過(guò)濾條件的表數(shù)據(jù),并對(duì)滿足數(shù)據(jù)過(guò)濾條件的表數(shù)據(jù)創(chuàng)建索引。
[0098]本發(fā)明提供的數(shù)據(jù)索引創(chuàng)建裝置,在創(chuàng)建索引時(shí)根據(jù)一定的數(shù)據(jù)過(guò)濾條件對(duì)目標(biāo)表數(shù)據(jù)進(jìn)行過(guò)濾,將不滿足數(shù)據(jù)過(guò)濾條件的目標(biāo)表數(shù)據(jù)濾除,只依據(jù)數(shù)據(jù)過(guò)濾條件對(duì)數(shù)據(jù)庫(kù)的目標(biāo)表數(shù)據(jù)進(jìn)行過(guò)濾,得到滿足過(guò)濾條件的表數(shù)據(jù),針對(duì)所述滿足過(guò)濾條件的表數(shù)據(jù)創(chuàng)建索引,從而索引中的數(shù)據(jù)量將大程度減少。滿足數(shù)據(jù)過(guò)濾條件的數(shù)據(jù)所占目標(biāo)表數(shù)據(jù)量比率越小,本發(fā)明提供的索引創(chuàng)建裝置提高索引創(chuàng)建的速度效果越明顯;尤其面臨海量數(shù)據(jù)時(shí),本發(fā)明提供的裝置能夠以更快的速度創(chuàng)建出索引。同時(shí),根據(jù)過(guò)濾條件創(chuàng)建的索弓丨,整個(gè)索引的使用效率也得到顯著提高。
[0099]所述數(shù)據(jù)過(guò)濾條件可以通過(guò)分析用戶以SQL方式發(fā)送的創(chuàng)建指令獲得,也可以通過(guò)分析用戶操作需求而獲得。
[0100]若所述數(shù)據(jù)過(guò)濾條件通過(guò)分析用戶以SQL方式發(fā)送的創(chuàng)建指令獲得,則所述數(shù)據(jù)過(guò)濾條件獲取模塊可進(jìn)一步包括:
[0101]創(chuàng)建指令接收單元:用于接收用戶創(chuàng)建索引的指令。
[0102]創(chuàng)建指令分析單元:用于從所述創(chuàng)建索引的指令中獲取數(shù)據(jù)過(guò)濾條件。
[0103]參照?qǐng)D4,在一些實(shí)施例中,所述索引創(chuàng)建模塊進(jìn)一步包括:
[0104]表數(shù)據(jù)讀取單元:用于讀取數(shù)據(jù)庫(kù)中的目標(biāo)表數(shù)據(jù);
[0105]數(shù)據(jù)過(guò)濾條件判斷單元:用于判斷相應(yīng)的目標(biāo)表數(shù)據(jù)是否滿足所述數(shù)據(jù)過(guò)濾條件,并在所述目標(biāo)表數(shù)據(jù)滿足所述數(shù)據(jù)過(guò)濾條件時(shí)觸發(fā)計(jì)算單元;
[0106]計(jì)算單元:用于對(duì)滿足所述數(shù)據(jù)過(guò)濾條件的目標(biāo)表數(shù)據(jù)進(jìn)行計(jì)算,得到索引數(shù)據(jù);
[0107]索引數(shù)據(jù)寫入單元:用于將所述索引數(shù)據(jù)寫入索引上相應(yīng)指針的位置。
[0108]參照?qǐng)D4,所述索引創(chuàng)建模塊還包括數(shù)據(jù)判別單元:對(duì)于目標(biāo)表數(shù)據(jù)分批處理的情況,用于在所述索引數(shù)據(jù)寫入單元將所述索引數(shù)據(jù)寫入索引上相應(yīng)指針的位置后,判斷整個(gè)索引是否創(chuàng)建完畢,并在整個(gè)索引未創(chuàng)建完畢的情況下,觸發(fā)所述表數(shù)據(jù)讀取單元繼續(xù)處理目標(biāo)表剩余待處理數(shù)據(jù),直到處理完畢。
[0109]在一些實(shí)施例中,所述數(shù)據(jù)過(guò)濾條件可以包括用戶創(chuàng)建索引命令中所包含的數(shù)據(jù)過(guò)濾條件。
[0110]在另一些實(shí)施例中,所述數(shù)據(jù)過(guò)濾條件可以從分析用戶操作需求所得到創(chuàng)建索引指令中獲得。
[0111]具體的,所述數(shù)據(jù)過(guò)濾條件包括反映用戶操作需求的數(shù)據(jù)過(guò)濾條件;所述數(shù)據(jù)過(guò)濾條件可通過(guò)分析用戶對(duì)該目標(biāo)表數(shù)據(jù)可能的查詢、更新、刪除操作,從操作所對(duì)應(yīng)的SQL語(yǔ)句中獲得,刪除不同SQL語(yǔ)句中所包含的相同的數(shù)據(jù)過(guò)濾條件,得到用戶對(duì)該表操作的主要過(guò)濾條件,然后綜合考慮性能等各方面應(yīng)屬后,最后得到創(chuàng)建索引所需要的多個(gè)不同的或一個(gè)數(shù)據(jù)過(guò)濾條件。
[0112]在一些實(shí)施例中,所述目標(biāo)表數(shù)據(jù)為數(shù)據(jù)表中的所有數(shù)據(jù)。
[0113]在一些實(shí)施例中,所述數(shù)據(jù)為大數(shù)據(jù),數(shù)據(jù)過(guò)濾條件包括:從依據(jù)數(shù)據(jù)生命周期對(duì)表數(shù)據(jù)所做出的分組中,選擇用來(lái)創(chuàng)建索引的目標(biāo)組所依據(jù)的選擇條件。
[0114]研發(fā)人員研發(fā)時(shí),依據(jù)數(shù)據(jù)生命周期,對(duì)大數(shù)據(jù)目標(biāo)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行分組;然后本實(shí)施例首先根據(jù)數(shù)據(jù)過(guò)濾條件,從所述數(shù)據(jù)分組中選取一個(gè)或多個(gè)分組作為目標(biāo)組,得到滿足數(shù)據(jù)過(guò)濾條件的表數(shù)