一種數(shù)據(jù)索引創(chuàng)建方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)索引創(chuàng)建方法及裝置。
【背景技術(shù)】
[0002]數(shù)據(jù)庫是為適應(yīng)數(shù)據(jù)處理的需要而發(fā)展起來的一種數(shù)據(jù)處理裝置。數(shù)據(jù)庫系統(tǒng)的萌芽出現(xiàn)于I960年,在1970年提出了數(shù)據(jù)庫的關(guān)系模型的概念,在此基礎(chǔ)上形成了關(guān)系數(shù)據(jù)庫。
[0003]關(guān)系數(shù)據(jù)庫是建立在關(guān)系數(shù)據(jù)庫模型基礎(chǔ)上的數(shù)據(jù)庫,具有堅(jiān)實(shí)的數(shù)學(xué)理論基礎(chǔ)。隨著信息技術(shù)發(fā)展,數(shù)據(jù)庫已經(jīng)滲透到各個(gè)行業(yè)和應(yīng)用中,關(guān)系數(shù)據(jù)庫在各行各業(yè)更是得到了廣泛應(yīng)用。但是,世界已經(jīng)發(fā)生了翻天覆地的變化,與剛提出數(shù)據(jù)庫概念的時(shí)代相t匕,數(shù)據(jù)特征變化很大。那些結(jié)構(gòu)復(fù)雜且量大的數(shù)據(jù),統(tǒng)稱為大數(shù)據(jù)。面對(duì)這種類型數(shù)據(jù),傳統(tǒng)的關(guān)系數(shù)據(jù)庫系統(tǒng)表現(xiàn)出越來越多的弊端。
[0004]關(guān)系型數(shù)據(jù)庫采用SQL (Structured Query Language結(jié)構(gòu)化查詢語言)作為數(shù)據(jù)庫操作語言,SQL從提出到現(xiàn)在經(jīng)過幾次修訂。1974年,SQL最初由IBM公司實(shí)現(xiàn)。1986年美國國家標(biāo)準(zhǔn)局通過數(shù)據(jù)庫語言美國標(biāo)準(zhǔn)。1987年,“國際標(biāo)準(zhǔn)化組織(ISO)”把ANSI SQL作為國際標(biāo)準(zhǔn)。1989年,ISO提出了具有完整性特征的SQL89標(biāo)準(zhǔn)。1992年,ISO公布了SQL92標(biāo)準(zhǔn)。
[0005]索引是對(duì)數(shù)據(jù)庫的數(shù)據(jù)表中的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可以快速訪問數(shù)據(jù)庫表中的特定信息。現(xiàn)有技術(shù)中,創(chuàng)建數(shù)據(jù)庫索引的方法是:通過分析應(yīng)用程序?qū)?shù)據(jù)庫的使用場景,以及分析SQL語句查詢條件,然后得到可能需要的索引及其候選字段,最后綜合考慮性能等各種因素,確定數(shù)據(jù)表的一個(gè)或者多個(gè)列作為索引字段,創(chuàng)建一個(gè)或者多個(gè)索引。由于每個(gè)索引都是針對(duì)數(shù)據(jù)表中所有數(shù)據(jù)的,所以數(shù)據(jù)表中任何一條數(shù)據(jù)的索引字段的值,在索引中都對(duì)應(yīng)一個(gè)索引數(shù)據(jù)。如果任何一條數(shù)據(jù)的索引字段的值發(fā)生增刪改變化,都需要增刪改索引數(shù)據(jù)。
[0006]面臨現(xiàn)代數(shù)據(jù)特征的變化,現(xiàn)有技術(shù)的創(chuàng)建的索引中的數(shù)據(jù)量大,占用空間也越來越大,使用存儲(chǔ)成本越來越高,進(jìn)而明顯影響用戶訪問數(shù)據(jù)表信息的效率。同時(shí),索引是在SQL語句執(zhí)行時(shí)使用以使得用戶能夠快速訪問數(shù)據(jù),但由于索引中一些數(shù)據(jù)長期沒有被SQL使用,導(dǎo)致索引數(shù)據(jù)的利用率降低。
[0007]此外,索引隨著數(shù)據(jù)增大后,維護(hù)成本相應(yīng)增加,應(yīng)用訪問變得越來越緩慢,進(jìn)而增加刪除數(shù)據(jù)變得很困難,系統(tǒng)擴(kuò)展性差,索引的維護(hù)成本也提高。在大數(shù)據(jù)時(shí)代,數(shù)據(jù)在不斷膨脹,但是當(dāng)前的商用關(guān)系數(shù)據(jù)庫適用于處理記錄數(shù)在千萬數(shù)據(jù)量級(jí)以內(nèi)的表。在某些大型系統(tǒng)中,當(dāng)表數(shù)據(jù)量達(dá)到更高的數(shù)量級(jí)(例如TB、PB、ZB),由于索引中數(shù)據(jù)量巨大,不但插入新數(shù)據(jù)非常困難,而且也難以創(chuàng)建新的索引。
【發(fā)明內(nèi)容】
[0008]有鑒于此,本發(fā)明提供一種數(shù)據(jù)索引創(chuàng)建方法,包括如下步驟:
[0009]獲取數(shù)據(jù)過濾條件;
[0010]根據(jù)所述數(shù)據(jù)過濾條件,對(duì)目標(biāo)表數(shù)據(jù)進(jìn)行篩選得到滿足數(shù)據(jù)過濾條件的表數(shù)據(jù),并對(duì)所述滿足數(shù)據(jù)過濾條件的目標(biāo)表數(shù)據(jù)創(chuàng)建索引。
[0011]可選的,根據(jù)所述數(shù)據(jù)過濾條件,對(duì)數(shù)據(jù)庫中相應(yīng)的表數(shù)據(jù)進(jìn)行篩選得到滿足過濾條件的表數(shù)據(jù),并對(duì)所述滿足過濾條件的表數(shù)據(jù)創(chuàng)建索引的步驟包括:
[0012]讀取數(shù)據(jù)庫中的目標(biāo)表數(shù)據(jù);
[0013]判斷相應(yīng)的目標(biāo)表數(shù)據(jù)是否滿足所述數(shù)據(jù)過濾條件,若是,則執(zhí)行下一步驟;
[0014]對(duì)所述滿足過濾條件的目標(biāo)表數(shù)據(jù)進(jìn)行計(jì)算,得到索引數(shù)據(jù);
[0015]將所述索引數(shù)據(jù)寫入索引上相應(yīng)指針的位置。
[0016]較佳的,根據(jù)所述數(shù)據(jù)過濾條件,對(duì)目標(biāo)表數(shù)據(jù)進(jìn)行篩選得到滿足過濾條件的表數(shù)據(jù),并對(duì)所述滿足過濾條件的表數(shù)據(jù)創(chuàng)建索引的步驟還包括:
[0017]將所述索引數(shù)據(jù)寫入索引上相應(yīng)指針的位置后,判斷索引是否創(chuàng)建完畢;若是,則結(jié)束;否則返回所述讀取數(shù)據(jù)庫中的目標(biāo)表數(shù)據(jù)的步驟。
[0018]較佳的,所述數(shù)據(jù)過濾條件包含在創(chuàng)建索引的SQL命令中。
[0019]較佳的,所述數(shù)據(jù)為大數(shù)據(jù)時(shí),所述數(shù)據(jù)過濾條件包括:從依據(jù)數(shù)據(jù)生命周期對(duì)表數(shù)據(jù)所做出的分組中,選擇用來創(chuàng)建索引的目標(biāo)組所依據(jù)的過濾條件。
[0020]較佳的,所述數(shù)據(jù)過濾條件通過where語句實(shí)現(xiàn),或通過包含范圍單詞的語句實(shí)現(xiàn),或通過包含列表單詞的語句實(shí)現(xiàn)。
[0021]進(jìn)一步,本發(fā)明提供一種數(shù)據(jù)索引創(chuàng)建裝置,包括:
[0022]數(shù)據(jù)過濾條件獲取模塊:用于獲取數(shù)據(jù)過濾條件;
[0023]索引創(chuàng)建模塊:用于根據(jù)所述數(shù)據(jù)過濾條件,對(duì)目標(biāo)表數(shù)據(jù)進(jìn)行篩選得到滿足過濾條件的表數(shù)據(jù),并對(duì)所述滿足數(shù)據(jù)過濾條件的表數(shù)據(jù)創(chuàng)建索引。
[0024]可選的,所述索引創(chuàng)建模塊包括:表數(shù)據(jù)讀取單元:用于讀取數(shù)據(jù)庫中的
[0025]目標(biāo)表數(shù)據(jù);
[0026]數(shù)據(jù)過濾條件判斷單元:用于判斷相應(yīng)的目標(biāo)表數(shù)據(jù)是否滿足所述數(shù)據(jù)過濾條件,并在所述目標(biāo)表數(shù)據(jù)滿足所述數(shù)據(jù)過濾條件時(shí)觸發(fā)計(jì)算單元;
[0027]計(jì)算單元:用于對(duì)滿足數(shù)據(jù)過濾條件的目標(biāo)表數(shù)據(jù)進(jìn)行計(jì)算,得到索引數(shù)據(jù);
[0028]索引數(shù)據(jù)寫入單元:用于將所述索引數(shù)據(jù)寫入索引上相應(yīng)指針的位置。
[0029]可選的,所述索引創(chuàng)建模塊還包括數(shù)據(jù)判別單元:用于在所述索引數(shù)據(jù)寫入單元將所述索引數(shù)據(jù)寫入索引上相應(yīng)指針的位置后,判斷數(shù)據(jù)庫中是否存在未讀取的表數(shù)據(jù),并在所述索引未創(chuàng)建完畢的情況下,觸發(fā)所述表數(shù)據(jù)讀取單元。
[0030]較佳的,所述數(shù)據(jù)過濾條件包含在創(chuàng)建索引的SQL命令中。
[0031]較佳的,所述數(shù)據(jù)為大數(shù)據(jù),所述數(shù)據(jù)過濾條件包括:從依據(jù)數(shù)據(jù)生命周期對(duì)表數(shù)據(jù)所做出的分組中,選擇用來創(chuàng)建索引的目標(biāo)組所依據(jù)的選擇條件。
[0032]較佳的,所述數(shù)據(jù)過濾條件通過where語句實(shí)現(xiàn),或通過包含范圍單詞的語句實(shí)現(xiàn),或通過包含列表單詞的語句實(shí)現(xiàn)。
[0033]從上面所述可以看出,通過本發(fā)明提供的數(shù)據(jù)索引創(chuàng)建方法,在創(chuàng)建索引時(shí)根據(jù)一定的數(shù)據(jù)過濾條件對(duì)目標(biāo)表數(shù)據(jù)進(jìn)行過濾,將不滿足數(shù)據(jù)過濾條件的目標(biāo)表數(shù)據(jù)濾除,只針對(duì)數(shù)據(jù)庫中的某一部分?jǐn)?shù)據(jù)創(chuàng)建索引,從而索引中的數(shù)據(jù)量將大程度減少。同時(shí)經(jīng)過過濾,基本不被使用的目標(biāo)表數(shù)據(jù)濾除在索引之外,這樣使得索引的使用效率得到了顯著的提聞
[0034]此外,由于過濾了冗余的表數(shù)據(jù),用戶通過索引訪問數(shù)據(jù)庫的速度得到提升。索引的維護(hù)成本也得到降低,索引縮小之后,增加和刪除數(shù)據(jù)的操作變得簡便;創(chuàng)建索引的速度得到提高,難度降低,時(shí)間減少,使得用戶更容易根據(jù)其需求創(chuàng)建新的索引。尤其是在對(duì)大數(shù)據(jù)、海量數(shù)據(jù)創(chuàng)建索引時(shí),本發(fā)明所提供的方法能夠更加迅速地形成索引。
[0035]此外,本發(fā)明實(shí)施例的數(shù)據(jù)索引創(chuàng)建方法,允許數(shù)據(jù)庫研發(fā)人員根據(jù)實(shí)際需要,依據(jù)數(shù)據(jù)生命周期對(duì)數(shù)據(jù)庫進(jìn)行管理:數(shù)據(jù)庫研發(fā)人員根據(jù)本發(fā)明實(shí)施例,可首先通過用戶需求,確定索引的篩選條件,建立相應(yīng)的索引;然后根據(jù)數(shù)據(jù)生命周期對(duì)索引進(jìn)行維護(hù)。在創(chuàng)建索引時(shí),也不再需要將冷熱數(shù)據(jù)從表中分開,也沒有數(shù)據(jù)遷移,數(shù)據(jù)庫設(shè)計(jì)將更加