一種索引處理方法與設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,尤其涉及一種索引處理技術(shù)。
【背景技術(shù)】
[0002]在實(shí)際數(shù)據(jù)庫(kù)查詢、管理等應(yīng)用中,數(shù)據(jù)庫(kù)中單表數(shù)據(jù)可能十分龐大,若想從一張包含大量數(shù)據(jù)的表中查詢到目標(biāo)數(shù)據(jù),往往為數(shù)據(jù)庫(kù)帶來(lái)過(guò)重的負(fù)載,進(jìn)而影響到數(shù)據(jù)庫(kù)的性能。
【發(fā)明內(nèi)容】
[0003]本申請(qǐng)的目的是提供一種索引處理方法與設(shè)備。
[0004]根據(jù)本申請(qǐng)的一個(gè)方面,提供了一種索引處理方法,包括:
[0005]獲取同一個(gè)數(shù)據(jù)庫(kù)對(duì)象的多個(gè)第一索引,其中,每個(gè)所述第一索引對(duì)應(yīng)于所述數(shù)據(jù)庫(kù)對(duì)象的單條數(shù)據(jù)操作記錄;
[0006]合并所述多個(gè)第一索引以獲得所述數(shù)據(jù)庫(kù)對(duì)象的一個(gè)或多個(gè)第二索引,其中,每個(gè)所述第一索引的至少一個(gè)索引字段可使用一個(gè)所述第二索引。
[0007]根據(jù)本申請(qǐng)的另一方面,還提供了一種索引處理設(shè)備,包括:
[0008]第一裝置,用于獲取同一個(gè)數(shù)據(jù)庫(kù)對(duì)象的多個(gè)第一索引,其中,每個(gè)所述第一索引對(duì)應(yīng)于所述數(shù)據(jù)庫(kù)對(duì)象的單條數(shù)據(jù)操作記錄;
[0009]第二裝置,用于合并所述多個(gè)第一索引以獲得所述數(shù)據(jù)庫(kù)對(duì)象的一個(gè)或多個(gè)第二索引,其中,每個(gè)所述第一索引的至少一個(gè)索引字段可使用一個(gè)所述第二索引。
[0010]與現(xiàn)有技術(shù)相比,本申請(qǐng)通過(guò)將數(shù)據(jù)庫(kù)表中多個(gè)針對(duì)單條數(shù)據(jù)庫(kù)操作語(yǔ)句的建議索引合并生成合并索引,從而針對(duì)數(shù)據(jù)庫(kù)表上的所有單條數(shù)據(jù)庫(kù)操作語(yǔ)句的建議索引做了統(tǒng)一的優(yōu)化,不僅通過(guò)增加合并索引提升了數(shù)據(jù)庫(kù)查詢性能,也減少了單條數(shù)據(jù)庫(kù)操作語(yǔ)句建議索引的數(shù)量,節(jié)省了索引占用的空間,提高了索引的復(fù)用率。進(jìn)一步地,本申請(qǐng)還通過(guò)設(shè)定索引效率閾值來(lái)引導(dǎo)索引的合并處理,在有效減少索引建議數(shù)量的同時(shí),也使得合并索引對(duì)數(shù)據(jù)庫(kù)查詢性能的提升與單條語(yǔ)句索引建議相當(dāng)。
【附圖說(shuō)明】
[0011]通過(guò)閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
[0012]圖1示出根據(jù)本申請(qǐng)一個(gè)方面的一種索引處理的設(shè)備示意圖;
[0013]圖2示出根據(jù)本申請(qǐng)一個(gè)優(yōu)選實(shí)施例的一種索引處理的設(shè)備示意圖;
[0014]圖3示出根據(jù)本申請(qǐng)另一個(gè)方面的一種索引處理的方法流程圖;
[0015]圖4示出根據(jù)本申請(qǐng)一個(gè)優(yōu)選實(shí)施例的一種索引處理的方法流程圖。
[0016]附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
【具體實(shí)施方式】
[0017]下面結(jié)合附圖對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)描述。
[0018]在本申請(qǐng)一個(gè)典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
[0019]內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
[0020]計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
[0021]圖1示出根據(jù)本申請(qǐng)一個(gè)方面的一種索引處理的設(shè)備示意圖。索引處理設(shè)備I包括第一裝置101和第二裝置102.
[0022]其中,第一裝置獲取同一個(gè)數(shù)據(jù)庫(kù)對(duì)象的多個(gè)第一索引,其中,每個(gè)所述第一索引對(duì)應(yīng)于所述數(shù)據(jù)庫(kù)對(duì)象的單條數(shù)據(jù)操作記錄;第二裝置合并所述多個(gè)第一索引以獲得所述數(shù)據(jù)庫(kù)對(duì)象的一個(gè)或多個(gè)第二索引,其中,每個(gè)所述第一索引的至少一個(gè)索引字段可使用一個(gè)所述第二索引。
[0023]具體地,索引處理設(shè)備I的第一裝置101獲取同一個(gè)數(shù)據(jù)庫(kù)對(duì)象的多個(gè)第一索引,其中每個(gè)第一索引對(duì)應(yīng)于所述數(shù)據(jù)庫(kù)對(duì)象的單條數(shù)據(jù)操作記錄。在此,所述多個(gè)第一索引來(lái)自于同一個(gè)數(shù)據(jù)庫(kù)對(duì)象。優(yōu)選地,所述多個(gè)第一索引來(lái)自于同一個(gè)數(shù)據(jù)庫(kù)中的同一張表。所述第一索引對(duì)應(yīng)于數(shù)據(jù)庫(kù)表中的單條數(shù)據(jù)操作記錄,優(yōu)選地,所述單條數(shù)據(jù)操作記錄,包括單條SQL查詢語(yǔ)句,通常由DML來(lái)定義。進(jìn)一步,優(yōu)選地,采用根據(jù)where條件等值查詢字段加入索引字段候選字段的方法建立第一索引。例如,查詢時(shí)使用語(yǔ)句:select*fr0mtestTable where a = I,這是針對(duì)數(shù)據(jù)庫(kù)表的一條查詢語(yǔ)句,此時(shí),可以依據(jù)所述查詢語(yǔ)句創(chuàng)建一個(gè)簡(jiǎn)單的索引:Create index testTable_a ON testTable (a)。又如,若查詢條件不止一個(gè),如:select*from testTable where a = land b = 2,則依據(jù)所述查詢語(yǔ)句創(chuàng)建一個(gè)多重索引:Create index testTable_a_b ON testTable (a, b)。再如,若查詢條件有層級(jí)或邏輯關(guān)系時(shí),可以將查詢條件表示成樹(shù)狀關(guān)系,并根據(jù)樹(shù)形結(jié)構(gòu)給出相應(yīng)的索引,如查詢語(yǔ)句為:select*from testTable where a = land b = 2and c = 3or d = 4or e = 5,在此,可以基于運(yùn)算操作符(如=,and, or)和運(yùn)算操作數(shù)(如a, b, c, d, e, I, 2,3,4,5)的優(yōu)先級(jí)別建立樹(shù)形結(jié)構(gòu),進(jìn)而得出在如下三組列上創(chuàng)建3條索引:(a,b,c),(d),(e),所述三條索引分別都可以滿足所述查詢條件。在此,進(jìn)一步由于索引上每一列的區(qū)分度不同,還可以通過(guò)列的區(qū)分度的計(jì)算比較決定以該列創(chuàng)建索引的可選度,或者依據(jù)列的區(qū)分度的計(jì)算比較創(chuàng)建出索引上效率較高的列排列組合,使區(qū)分度較好的字段排列在字段組合前面,例如,上述創(chuàng)建的索引(a,b,c)中,若三個(gè)字段的區(qū)分度排序?yàn)閎,c,a,則可以得到更為準(zhǔn)確的索引(b,c, a)。進(jìn)一步,優(yōu)選地,若所述單條數(shù)據(jù)操作記錄所對(duì)應(yīng)的第一索引存在多個(gè),則會(huì)選取其中索引效果最佳的第一索引作為參與到后續(xù)合并運(yùn)算中的所述第一索引。
[0024]本領(lǐng)域技術(shù)人員應(yīng)能理解,上述采用根據(jù)where條件等值查詢字段加入索引字段候選字段的方法建立第一索引僅為舉例,其他方法如可適用本申請(qǐng),也應(yīng)包含在本申請(qǐng)的保護(hù)范圍以內(nèi),并在此以引用方式包含于此。
[0025]接著,索引處理設(shè)備I的第二裝置102合并所述多個(gè)第一索引以獲得所述數(shù)據(jù)庫(kù)對(duì)象的一個(gè)或多個(gè)第二索引,其中,每個(gè)第一索引的至少一個(gè)索引字段可使用一個(gè)第二索弓I。所述多個(gè)第一索引均是對(duì)應(yīng)于數(shù)據(jù)庫(kù)表上的單條數(shù)據(jù)操作記錄。即每一條第一索引服務(wù)于特定的單條數(shù)據(jù)操作記錄,多數(shù)情況下,不能被其他的單條數(shù)據(jù)操作記錄所用,例如,在一個(gè)數(shù)據(jù)庫(kù)表上存在多條所述第一索引idxl (a, b, c, d), idx2 (a, c, d), idx3 (a, b, d),idx4 (a, d), idx5 (b, d),每一條第一索引對(duì)應(yīng)于一條相應(yīng)的查詢語(yǔ)句。對(duì)所述多個(gè)第一索引進(jìn)行合并算法,可以得到一條或者多條合并索引,即為第二索引,如,針對(duì)上述多個(gè)第一索引得到第二索引ind(d,a)和ind(b,d)。有時(shí),利用一條第二索引就可以查詢到所有第一索引對(duì)應(yīng)的數(shù)據(jù),有時(shí),則需要多條第二索引才能滿足覆蓋所有第一索引的查詢范圍。在此,所得到的一個(gè)或多個(gè)第二索引要滿足,每個(gè)第一索引的至少一個(gè)字段能夠被一個(gè)第二索引的字段所包含。如,上述第一索引idx2(a,c, d),有三個(gè)字段,則至少有一個(gè)字段可以使用所得到的至少一個(gè)第二索引來(lái)進(jìn)行查詢,本例中,得到的第二索引是ind(d,a)和ind(b,d),其中ind(d,a)包含了 idx2(a,c, d)中的兩個(gè)字段a和d,同樣的,其他第一索引應(yīng)都能夠滿足這一條件。此處,這一條件的限定保證了通過(guò)所生成的一個(gè)或多個(gè)第二索引能夠查詢到原先多個(gè)第一索引所查詢的所有的數(shù)據(jù),從而使得第二索引在性能上能與第一索引持平,使得索引合并后,以產(chǎn)出的2個(gè)合并索引能夠完成原先5個(gè)索引所能做到的事情。
[0026]在此,索引處理設(shè)備I通過(guò)第一裝置101獲取統(tǒng)一數(shù)據(jù)庫(kù)對(duì)象的多個(gè)第一索引,并通過(guò)第二裝置將所述多個(gè)第一索引合并為所述數(shù)據(jù)庫(kù)對(duì)象的一個(gè)或多個(gè)第二索引,從而對(duì)數(shù)據(jù)庫(kù)表上的所有查詢語(yǔ)句做了統(tǒng)一的優(yōu)化,使得數(shù)據(jù)庫(kù)表上的索引數(shù)量大大減少,以較少的合并索引完成以前較多針對(duì)單條數(shù)據(jù)庫(kù)操作語(yǔ)句的建議索引才能完成的查詢?nèi)蝿?wù),減少了不必要的索引,節(jié)省了索引占用的空間,提高了索引的復(fù)用率,并通過(guò)增加合并索引提升了數(shù)據(jù)庫(kù)查詢性能。
[0027]在一個(gè)優(yōu)選實(shí)施例中,所述索引處理設(shè)備I的第二裝置102根據(jù)所述多個(gè)第一索引確定優(yōu)選索引字段,并根據(jù)所述優(yōu)選索引字段對(duì)所述多個(gè)第一索引中該優(yōu)選索引字段所覆蓋的第一索引進(jìn)行合并處理,以獲得所述數(shù)據(jù)庫(kù)對(duì)象的一個(gè)或多個(gè)第二索引;對(duì)所述多個(gè)第一索引中未被該優(yōu)選索引字段覆蓋的第一索引進(jìn)行合并處理,以獲得所述數(shù)據(jù)庫(kù)對(duì)象的一個(gè)或多個(gè)第二索引,直至每個(gè)第一索引的至少一個(gè)索引字段可使用一個(gè)第二索引。
[0028]具體地,通過(guò)所述索引處理設(shè)備I的第一裝置101獲得了同一個(gè)數(shù)據(jù)對(duì)象的多個(gè)第一索引,對(duì)所述多個(gè)第一索引進(jìn)行合并運(yùn)算生成第二索引首先要確定優(yōu)選索引字段,再以所述優(yōu)選索引字段作為所述第二索引的字段生成相應(yīng)的第二索引。優(yōu)選索引字段是基于已有的各個(gè)第一索引中的各個(gè)字段確定出來(lái)的,主要是先設(shè)定一定的字段選擇標(biāo)準(zhǔn)對(duì)所述多個(gè)第一索引中的各個(gè)字段進(jìn)行比較選擇,然后通過(guò)字段判斷標(biāo)準(zhǔn)對(duì)所選出的優(yōu)選字段進(jìn)行判斷,進(jìn)而確定最終的優(yōu)選索引字段。例如,所述字段選擇標(biāo)準(zhǔn)包括,通過(guò)對(duì)所述多個(gè)第一索引的各個(gè)字段的頻次進(jìn)行排序,取頻次最高的字段作為優(yōu)選索引字段,也包括,列出所述多個(gè)第一索引的各個(gè)字段,取字段區(qū)分度最高的字段作為優(yōu)選索引字段。多種字段選擇標(biāo)準(zhǔn)可以配合使用,當(dāng)一種選擇標(biāo)準(zhǔn)無(wú)法確定優(yōu)選的索引字段時(shí),可以引入第二種選擇標(biāo)準(zhǔn)對(duì)無(wú)法確定的索引字段繼續(xù)進(jìn)一步選擇,直至選出優(yōu)選索引字段。例如,有多個(gè)第一索引cl, c2, c3, c4, c5使用選擇標(biāo)準(zhǔn)A多個(gè)第一索引的各個(gè)字段進(jìn)行比較,得到字段a和b都符合標(biāo)準(zhǔn)A,此時(shí),可以引入標(biāo)準(zhǔn)B,對(duì)所述符合標(biāo)準(zhǔn)A的字段a和b再次進(jìn)行比較,若判斷得出字段a符合標(biāo)準(zhǔn)B,則字段a就是所述優(yōu)選索引字段。進(jìn)而,對(duì)于依照字段選擇標(biāo)準(zhǔn)選擇出的優(yōu)選索引字段進(jìn)行判