本發(fā)明涉及數(shù)據(jù)庫技術(shù),特別是涉及一種數(shù)據(jù)庫索引創(chuàng)建方法和裝置。
背景技術(shù):
目前的應(yīng)用程序大部分都使用數(shù)據(jù)庫來存儲(chǔ)底層數(shù)據(jù),在應(yīng)用程序運(yùn)行過程中經(jīng)常需要做大量的數(shù)據(jù)查詢操作。當(dāng)數(shù)據(jù)庫數(shù)據(jù)量較大時(shí),大量的數(shù)據(jù)查詢操作就會(huì)存在查詢性能差的問題。例如,查詢特定數(shù)據(jù)結(jié)果需要時(shí)間過長,從而導(dǎo)致需要較長時(shí)間才能將數(shù)據(jù)結(jié)果返回客戶端,極端情況下,當(dāng)在一定時(shí)間內(nèi)無法執(zhí)行完查詢時(shí),會(huì)導(dǎo)致數(shù)據(jù)庫超時(shí)錯(cuò)誤,客戶端無法獲取數(shù)據(jù)結(jié)果從而出現(xiàn)錯(cuò)誤頁面。另外,查詢特定數(shù)據(jù)需要大量的服務(wù)器i/o操作,因此也會(huì)給數(shù)據(jù)庫服務(wù)器帶來較大的負(fù)載壓力。
在數(shù)據(jù)庫表創(chuàng)建之初,由于數(shù)據(jù)量比較小,此時(shí)不會(huì)出現(xiàn)查詢性能問題,但是,在程序運(yùn)行一段時(shí)間之后,隨著數(shù)據(jù)庫數(shù)據(jù)量的增加,在進(jìn)行大量的數(shù)據(jù)查詢時(shí)就會(huì)存在上述查詢性能差的問題。
由此可見,當(dāng)應(yīng)用程序在數(shù)據(jù)庫表中的數(shù)據(jù)大量增長以后,運(yùn)行時(shí)會(huì)存在上述查詢性能問題。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的主要目的在于提供一種數(shù)據(jù)庫索引創(chuàng)建方法和裝置,可以提高應(yīng)用程序的數(shù)據(jù)查詢性能。
為了達(dá)到上述目的,本發(fā)明提出的技術(shù)方案為:
一種數(shù)據(jù)庫索引創(chuàng)建方法,包括:
當(dāng)發(fā)生數(shù)據(jù)查詢操作或預(yù)設(shè)的統(tǒng)計(jì)周期結(jié)束時(shí),對(duì)數(shù)據(jù)查詢操作統(tǒng)計(jì)數(shù)據(jù)進(jìn)行分析,確定出數(shù)據(jù)查詢操作次數(shù)滿足預(yù)設(shè)自動(dòng)創(chuàng)建索引條件的查詢字段組合;
對(duì)于每個(gè)沒有相應(yīng)數(shù)據(jù)表索引的所述查詢字段組合,根據(jù)該查詢字段組合建立數(shù)據(jù)表索引。
一種數(shù)據(jù)庫索引創(chuàng)建裝置,包括:
數(shù)據(jù)分析模塊,用于在發(fā)生數(shù)據(jù)查詢操作或預(yù)設(shè)的統(tǒng)計(jì)周期結(jié)束時(shí),對(duì)數(shù)據(jù)查詢 操作統(tǒng)計(jì)數(shù)據(jù)進(jìn)行分析,確定出數(shù)據(jù)查詢操作次數(shù)滿足預(yù)設(shè)自動(dòng)創(chuàng)建索引條件的查詢字段組合;
索引創(chuàng)建模塊,用于對(duì)于每個(gè)沒有相應(yīng)數(shù)據(jù)表索引的所述查詢字段組合,根據(jù)該查詢字段組合建立數(shù)據(jù)表索引。
綜上所述,本發(fā)明提出的數(shù)據(jù)庫索引創(chuàng)建方法和裝置,通過監(jiān)測各種查詢字段組合對(duì)應(yīng)的查詢次數(shù),來觸發(fā)利用查詢次數(shù)達(dá)到一定條件的查詢字段組合,自動(dòng)創(chuàng)建相應(yīng)的數(shù)據(jù)表索引。這樣,對(duì)于操作頻繁的查詢可以直接利用所建立的索引獲取數(shù)據(jù),從而可以大幅度提高應(yīng)用程序的數(shù)據(jù)查詢性能。
附圖說明
圖1為本發(fā)明實(shí)施例一的方法流程示意圖;
圖2為本發(fā)明實(shí)施例一的裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述。
本發(fā)明的核心思想是:對(duì)應(yīng)用程序在運(yùn)行過程中進(jìn)行的數(shù)據(jù)查詢操作進(jìn)行采集,對(duì)所采集的數(shù)據(jù)查詢操作數(shù)據(jù)進(jìn)行分析,針對(duì)查詢次數(shù)高的查詢條件,自動(dòng)地在數(shù)據(jù)表上創(chuàng)建相應(yīng)的索引,以便提高數(shù)據(jù)查詢效率。
圖1為本發(fā)明實(shí)施例一的數(shù)據(jù)庫索引創(chuàng)建方法流程示意圖,如圖1所示,該實(shí)施例主要包括:
步驟101、當(dāng)發(fā)生數(shù)據(jù)查詢操作或預(yù)設(shè)的統(tǒng)計(jì)周期結(jié)束時(shí),對(duì)數(shù)據(jù)查詢操作統(tǒng)計(jì)數(shù)據(jù)進(jìn)行分析,確定出數(shù)據(jù)查詢操作次數(shù)滿足預(yù)設(shè)自動(dòng)創(chuàng)建索引條件的查詢字段組合。
本步驟,用于根據(jù)數(shù)據(jù)查詢操作的統(tǒng)計(jì)數(shù)據(jù),來確定出查詢次數(shù)達(dá)到一定條件的查詢字段組合,以便基于此,建立相應(yīng)的數(shù)據(jù)表索引,以提高數(shù)據(jù)查詢性能。
在實(shí)際應(yīng)用中,本步驟所述分析的觸發(fā)可以是事件觸發(fā)也可以是周期觸發(fā),即所述分析的執(zhí)行時(shí)機(jī)可以為發(fā)生數(shù)據(jù)查詢操作時(shí)或者是每個(gè)統(tǒng)計(jì)周期結(jié)束時(shí)。下面分別就這兩種觸發(fā)情況下所述分析的具體實(shí)現(xiàn)進(jìn)行舉例說明:
較佳地,當(dāng)發(fā)生數(shù)據(jù)查詢操作時(shí),可以采用下述方法對(duì)數(shù)據(jù)查詢操作統(tǒng)計(jì)數(shù)據(jù)進(jìn)行分析:
步驟1011a、獲取所述數(shù)據(jù)查詢操作中的查詢字段組合。
本步驟中,需要從數(shù)據(jù)查詢操作中解析出所包含的查詢字段組合,具體地,即從查詢條件中獲取所涉及的查詢字段以及查詢字段之間的關(guān)聯(lián)關(guān)系,該數(shù)據(jù)查詢操作中的查詢字段組合即通過這些查詢字段以及之間的關(guān)聯(lián)關(guān)系(包括字段的先后順序和關(guān)聯(lián)詞)進(jìn)行限定。
步驟1012a、計(jì)算在所述統(tǒng)計(jì)周期內(nèi)以所述查詢字段組合為查詢條件的數(shù)據(jù)查詢操作次數(shù)。
本步驟中,需要計(jì)算每種查詢字段組合在當(dāng)前周期內(nèi)對(duì)應(yīng)的數(shù)據(jù)查詢操作次數(shù),以便及時(shí)監(jiān)測到對(duì)應(yīng)的查詢次數(shù)較多的查詢字段組合。
當(dāng)對(duì)應(yīng)的查詢次數(shù)較多時(shí),說明以該查詢字段組合為查詢條件的查詢需求多,因此,據(jù)此創(chuàng)建相應(yīng)的數(shù)據(jù)表索引,可以有效提高查詢效率,改善大量數(shù)據(jù)查詢時(shí)的查詢性能。
步驟1013a、判斷所述數(shù)據(jù)查詢操作次數(shù)是否滿足所述自動(dòng)創(chuàng)建索引條件。
較佳地,當(dāng)所述統(tǒng)計(jì)周期結(jié)束時(shí),對(duì)數(shù)據(jù)查詢操作統(tǒng)計(jì)數(shù)據(jù)進(jìn)行分析包括:
步驟1011b、在所述統(tǒng)計(jì)周期結(jié)束時(shí),獲取本周期中各數(shù)據(jù)查詢操作中的查詢字段組合,對(duì)于每種查詢字段組合,計(jì)算本周期中以該查詢字段組合為查詢條件的數(shù)據(jù)查詢操作次數(shù)。
步驟1012b、判斷每個(gè)所述數(shù)據(jù)查詢操作次數(shù)是否滿足所述自動(dòng)創(chuàng)建索引條件。
在實(shí)際應(yīng)用中,本領(lǐng)域技術(shù)人員可以較為簡單的方式設(shè)置所述自動(dòng)創(chuàng)建索引條件,即所述數(shù)據(jù)查詢操作次數(shù)大于預(yù)設(shè)閾值。
較佳地,為了提高對(duì)用于創(chuàng)建數(shù)據(jù)表索引的查詢字段組合的選擇的準(zhǔn)確性,可以將自動(dòng)創(chuàng)建索引條件設(shè)置為如下形式:
所述數(shù)據(jù)查詢操作次數(shù)大于預(yù)設(shè)閾值并且所述查詢字段組合在前n個(gè)所述統(tǒng)計(jì)周期內(nèi)的數(shù)據(jù)查詢操作次數(shù)均大于所述閾值。
這里,將綜合當(dāng)前周期及此前的n個(gè)統(tǒng)計(jì)周期內(nèi)的數(shù)據(jù)查詢操作次數(shù),來進(jìn)行選擇。當(dāng)一種查詢字段組合不具有普遍性而僅是一個(gè)短期時(shí)間內(nèi)的頻繁行為時(shí),為其創(chuàng)建索引進(jìn)沒有意義的,因此,采用上述自動(dòng)創(chuàng)建索引條件,可以避免將其選擇為用于創(chuàng)建數(shù)據(jù)表索引的查詢字段組合。所述n可由本領(lǐng)域技術(shù)人員根據(jù)實(shí)際需要設(shè)置。
或者,將自動(dòng)創(chuàng)建索引條件設(shè)置為:
所述數(shù)據(jù)查詢操作次數(shù)大于預(yù)設(shè)閾值并且所述查詢字段組合在當(dāng)前累積時(shí)間 段內(nèi)的指定統(tǒng)計(jì)周期的數(shù)據(jù)查詢操作次數(shù)的均值大于所述閾值。
其中,所述指定統(tǒng)計(jì)周期為當(dāng)前累積時(shí)間段內(nèi)除周期tmin和周期tmax之外的其他統(tǒng)計(jì)周期,所述累積時(shí)間段由m個(gè)統(tǒng)計(jì)周期組成,所述周期tmin為當(dāng)前累積時(shí)間段內(nèi)所述查詢字段組合的數(shù)據(jù)查詢操作次數(shù)最少的統(tǒng)計(jì)周期,所述周期tmax為當(dāng)前累積時(shí)間段內(nèi)所述查詢字段組合的數(shù)據(jù)查詢操作次數(shù)最多的統(tǒng)計(jì)周期。具體地,所述m可由本領(lǐng)域技術(shù)人員根據(jù)實(shí)際需要設(shè)置。
在上述自動(dòng)創(chuàng)建索引條件中,需要將當(dāng)前一時(shí)間段內(nèi)(即當(dāng)前累積時(shí)間段內(nèi))數(shù)據(jù)查詢操作次數(shù)最少的統(tǒng)計(jì)周期和數(shù)據(jù)查詢操作次數(shù)最多的統(tǒng)計(jì)周期的數(shù)據(jù)去除,以確保所確定出的滿足條件的查詢字段組合的高頻查詢特性具有普遍性,減少不必要的數(shù)據(jù)表索引的建立。
本發(fā)明所述統(tǒng)計(jì)周期的長度可由本領(lǐng)域技術(shù)人員根據(jù)實(shí)際需要設(shè)置,例如可以是若干小時(shí)、天、周或月等,在此不再贅述。
步驟102、對(duì)于每個(gè)沒有相應(yīng)數(shù)據(jù)表索引的所述查詢字段組合,根據(jù)該查詢字段組合建立數(shù)據(jù)表索引。
本步驟中,對(duì)于步驟101中確定出的查詢字段組合,如果此前沒有基于其創(chuàng)建相應(yīng)的數(shù)據(jù)表索引,則會(huì)觸發(fā)根據(jù)其創(chuàng)建相應(yīng)的數(shù)據(jù)表索引。
圖2為與上述方法相對(duì)應(yīng)的數(shù)據(jù)庫索引創(chuàng)建裝置結(jié)構(gòu)示意圖,如圖2所示,該裝置包括:
數(shù)據(jù)分析模塊,用于在發(fā)生數(shù)據(jù)查詢操作或預(yù)設(shè)的統(tǒng)計(jì)周期結(jié)束時(shí),對(duì)數(shù)據(jù)查詢操作統(tǒng)計(jì)數(shù)據(jù)進(jìn)行分析,確定出數(shù)據(jù)查詢操作次數(shù)滿足預(yù)設(shè)自動(dòng)創(chuàng)建索引條件的查詢字段組合;
索引創(chuàng)建模塊,用于對(duì)于每個(gè)沒有相應(yīng)數(shù)據(jù)表索引的所述查詢字段組合,根據(jù)該查詢字段組合建立數(shù)據(jù)表索引。
較佳地,所述數(shù)據(jù)分析模塊,用于當(dāng)發(fā)生數(shù)據(jù)查詢操作時(shí),獲取所述數(shù)據(jù)查詢操作中的查詢字段組合;計(jì)算在當(dāng)前預(yù)設(shè)統(tǒng)計(jì)周期內(nèi)以所述查詢字段組合為查詢條件的數(shù)據(jù)查詢操作次數(shù);判斷所述數(shù)據(jù)查詢操作次數(shù)是否滿足所述自動(dòng)創(chuàng)建索引條件。
較佳地,所述數(shù)據(jù)分析模塊,用于在所述統(tǒng)計(jì)周期結(jié)束時(shí),獲取本周期中各數(shù)據(jù)查詢操作中的查詢字段組合,對(duì)于每種查詢字段組合,計(jì)算本周期中以該查詢字段組合為查詢條件的數(shù)據(jù)查詢操作次數(shù),并判斷每個(gè)所述數(shù)據(jù)查詢操作次數(shù)是否滿足所述自動(dòng)創(chuàng)建索引條件。
較佳地,所述自動(dòng)創(chuàng)建索引條件包括:
所述數(shù)據(jù)查詢操作次數(shù)大于預(yù)設(shè)閾值;或者,
所述數(shù)據(jù)查詢操作次數(shù)大于預(yù)設(shè)閾值并且所述查詢字段組合在前n個(gè)所述統(tǒng)計(jì)周期內(nèi)的數(shù)據(jù)查詢操作次數(shù)均大于所述閾值;或者,
所述數(shù)據(jù)查詢操作次數(shù)大于預(yù)設(shè)閾值并且所述查詢字段組合在當(dāng)前累積時(shí)間段內(nèi)的指定統(tǒng)計(jì)周期的數(shù)據(jù)查詢操作次數(shù)的均值大于所述閾值;所述指定統(tǒng)計(jì)周期為當(dāng)前累積時(shí)間段內(nèi)除周期tmin和周期tmax之外的其他統(tǒng)計(jì)周期,其中,所述累積時(shí)間段由m個(gè)統(tǒng)計(jì)周期組成,所述周期tmin為當(dāng)前累積時(shí)間段內(nèi)所述查詢字段組合的數(shù)據(jù)查詢操作次數(shù)最少的統(tǒng)計(jì)周期,所述周期tmax為當(dāng)前累積時(shí)間段內(nèi)所述查詢字段組合的數(shù)據(jù)查詢操作次數(shù)最多的統(tǒng)計(jì)周期。
綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。