本發(fā)明涉及數(shù)據(jù)庫的查詢技術(shù),尤其涉及一種數(shù)據(jù)庫的查詢方法和裝置。
背景技術(shù):
::數(shù)據(jù)庫已經(jīng)運(yùn)用在很多領(lǐng)域當(dāng)中,對于數(shù)據(jù)庫查詢的性能也直接關(guān)系著響應(yīng)速度和用戶的體驗(yàn)。當(dāng)前,在對數(shù)據(jù)庫進(jìn)行設(shè)計的時候,通常為了保持?jǐn)?shù)據(jù)的完整性,會按業(yè)務(wù)把內(nèi)容組織起來存儲在一個字段,從而造成字段的數(shù)據(jù)量較大,從而造成對該字段進(jìn)行查詢的效率低,開銷大。目前,通常采用建立全文索引來提高數(shù)據(jù)庫的查詢性能。但是,全文索引會占用大量空間,而且對于不同的數(shù)據(jù)庫引擎對全文索引的支持不理想,并且無法保證索引和數(shù)據(jù)實(shí)時同步。例如在某個表里面有一個大數(shù)據(jù)字段存儲了一篇文章,或者是存儲了一些按業(yè)務(wù)組裝的數(shù)據(jù)。如果在該字段上建立了全文索引,雖然能夠查詢效率可以提升,但是如果對該字段進(jìn)行增加、刪除和修改操作會比較頻繁。雖然有的數(shù)據(jù)庫可以通過函數(shù)索引來解決,但是考慮到穩(wěn)定性并不是所有的數(shù)據(jù)庫都支持函數(shù)索引。技術(shù)實(shí)現(xiàn)要素:為解決上述技術(shù)問題,本發(fā)明實(shí)施例期望提供一種數(shù)據(jù)庫的查詢方法和裝置,不僅提升了查詢性能,穩(wěn)定性高,能夠保證索引和數(shù)據(jù)的實(shí)時同步。本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:第一方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫的查詢方法,所述方法包括:數(shù)據(jù)庫根據(jù)待處理數(shù)據(jù)所滿足的結(jié)構(gòu)規(guī)則對所述待處理數(shù)據(jù)進(jìn)行拆分,得到子數(shù)據(jù)以及子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置;所述數(shù)據(jù)庫接收待查詢數(shù)據(jù);所述數(shù)據(jù)庫從所述子數(shù)據(jù)以及所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置獲取所述待查詢數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置。在上述實(shí)施例中,所述數(shù)據(jù)庫根據(jù)待處理數(shù)據(jù)所滿足的結(jié)構(gòu)規(guī)則對所述待處理數(shù)據(jù)進(jìn)行拆分,得到子數(shù)據(jù)以及子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置,包括:所述數(shù)據(jù)庫獲取所述待處理數(shù)據(jù)中的分隔符;所述數(shù)據(jù)庫根據(jù)所述分隔符將所述待處理數(shù)據(jù)拆分成至少兩個子數(shù)據(jù),并分別獲取所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置。在上述實(shí)施例中,當(dāng)所述待處理數(shù)據(jù)中不具有分隔符時,所述方法還包括:所述數(shù)據(jù)庫根據(jù)預(yù)設(shè)的設(shè)置策略在所述待處理數(shù)據(jù)中設(shè)置分隔符,得到更新后的待處理數(shù)據(jù)。在上述實(shí)施例中,在得到所述子數(shù)據(jù)以及所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置之后,所述方法還包括:將所述子數(shù)據(jù)以及所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置保存在新數(shù)據(jù)表中;相應(yīng)地,所述數(shù)據(jù)庫從所述子數(shù)據(jù)以及所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置獲取所述待查詢數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置,具體包括:所述數(shù)據(jù)庫根據(jù)所述待查詢數(shù)據(jù)查詢所述新數(shù)據(jù)表;當(dāng)所述新數(shù)據(jù)表中的子數(shù)據(jù)與所述待查詢數(shù)據(jù)匹配時,獲取與所述待查詢數(shù)據(jù)匹配的子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置。第二方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫的查詢裝置,所述裝置包括:拆分單元、接收單元和獲取單元,其中,所述拆分單元,用于根據(jù)待處理數(shù)據(jù)所滿足的結(jié)構(gòu)規(guī)則對所述待處理數(shù)據(jù)進(jìn)行拆分,得到子數(shù)據(jù)以及子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置;所述接收單元,用于接收待查詢數(shù)據(jù);所述獲取單元,用于從所述子數(shù)據(jù)以及所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置獲取所述待查詢數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置。在上述實(shí)施例中,所述拆分單元,具體用于:獲取所述待處理數(shù)據(jù)中的分隔符;以及,根據(jù)所述分隔符將所述待處理數(shù)據(jù)拆分成至少兩個子數(shù)據(jù),并分別獲取所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置。在上述實(shí)施例中,所述裝置還包括設(shè)置單元,用于當(dāng)所述待處理數(shù)據(jù)中不具有分隔符時,根據(jù)預(yù)設(shè)的設(shè)置策略在所述待處理數(shù)據(jù)中設(shè)置分隔符,得到更新后的待處理數(shù)據(jù)。在上述實(shí)施例中,所述裝置還包括保存單元,用于將所述子數(shù)據(jù)以及所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置保存在新數(shù)據(jù)表中;相應(yīng)地,所述獲取單元,具體用于:根據(jù)所述待查詢數(shù)據(jù)查詢所述新數(shù)據(jù)表;以及,當(dāng)所述新數(shù)據(jù)表中的子數(shù)據(jù)與所述待查詢數(shù)據(jù)匹配時,獲取與所述待查詢數(shù)據(jù)匹配的子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置。本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫的查詢方法和裝置,根據(jù)待處理數(shù)據(jù)所滿足的結(jié)構(gòu)規(guī)則進(jìn)行拆分,并將拆分后的子數(shù)據(jù)及對應(yīng)的主鍵進(jìn)行保存,該主鍵用于表示子數(shù)據(jù)在待處理數(shù)據(jù)中的位置;從而使得對待查詢數(shù)據(jù)進(jìn)行數(shù)據(jù)庫查詢時,可以通過對拆分后的子數(shù)據(jù)進(jìn)行查詢,并根據(jù)查詢得到的子數(shù)據(jù)所對應(yīng)的主鍵獲取待查詢數(shù)據(jù)在待處理數(shù)據(jù)中的位置。不僅提升了查詢性能,穩(wěn)定性高,能夠保證索引和數(shù)據(jù)的實(shí)時同步。附圖說明圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)庫的查詢方法流程示意圖;圖2為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)庫的查詢裝置結(jié)構(gòu)示意圖;圖3為本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)庫的查詢裝置結(jié)構(gòu)示意圖。具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。本發(fā)明實(shí)施例的基本思想為:根據(jù)待處理數(shù)據(jù)所滿足的結(jié)構(gòu)規(guī)則進(jìn)行拆分,并將拆分后的子數(shù)據(jù)及對應(yīng)的主鍵進(jìn)行保存,該主鍵用于表示子數(shù)據(jù)在待處理數(shù)據(jù)中的位置;從而使得對待查詢數(shù)據(jù)進(jìn)行數(shù)據(jù)庫查詢時,可以通過對拆分后的子數(shù)據(jù)進(jìn)行查詢,并根據(jù)查詢得到的子數(shù)據(jù)所對應(yīng)的主鍵獲取待查詢數(shù)據(jù)在待處理數(shù)據(jù)中的位置。不僅提升了查詢性能,穩(wěn)定性高,能夠保證索引和數(shù)據(jù)的實(shí)時同步。基于上述的基本思想,參見圖1,其示出了本發(fā)明實(shí)施例提供的一種數(shù)據(jù)庫的查詢方法流程,該方法可以應(yīng)用于數(shù)據(jù)庫中,該方法可以包括:S101:數(shù)據(jù)庫根據(jù)待處理數(shù)據(jù)所滿足的結(jié)構(gòu)規(guī)則對待處理數(shù)據(jù)進(jìn)行拆分,得到子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置;示例性地,本步驟具體可以包括:所述數(shù)據(jù)庫獲取所述待處理數(shù)據(jù)中的分隔符;所述數(shù)據(jù)庫根據(jù)所述分隔符將所述待處理數(shù)據(jù)拆分成至少兩個子數(shù)據(jù),并分別獲取所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置。進(jìn)一步地,當(dāng)所述待處理數(shù)據(jù)中不具有分隔符時,所述方法還包括:所述數(shù)據(jù)庫根據(jù)預(yù)設(shè)的設(shè)置策略在所述待處理數(shù)據(jù)中設(shè)置分隔符,得到更新后的待處理數(shù)據(jù)。具體來說,待處理數(shù)據(jù)可以是數(shù)據(jù)表中的一個存儲了大數(shù)據(jù)的字段,也可以是字段中的一條大數(shù)據(jù)的記錄;結(jié)構(gòu)規(guī)則可以是待處理數(shù)據(jù)中所具有的明顯的分隔特征,本發(fā)明實(shí)施例對此不作具體地限定。本實(shí)施例中,以字段A(A1,A2,A3,…,An)為例進(jìn)行說明,其中,n為字段中數(shù)據(jù)塊的編號,字段中各數(shù)據(jù)塊之間用逗號“,”進(jìn)行分隔,因此,逗號“,”為字段中的分隔符。那么字段A所滿足的結(jié)構(gòu)規(guī)則為:字段中的各數(shù)據(jù)塊之間具有分隔符且分隔符為逗號“,”。另外,本實(shí)施例中的結(jié)構(gòu)規(guī)則還可以是其他明顯的分隔特征,例如:換行符、縮進(jìn)符號等。當(dāng)字段A中各數(shù)據(jù)塊之間用逗號“,”進(jìn)行分隔時,那么數(shù)據(jù)庫就可以獲取字段A中的逗號“,”,接著可以根據(jù)字段A中的逗號“,”將字段A拆分為A1,A2,A3,…,An這n個子數(shù)據(jù), 并且分別可以獲取這些子數(shù)據(jù)在字段A中的位置;可以理解的,子數(shù)據(jù)在字段A中的位置可以是子數(shù)據(jù)所對應(yīng)的主鍵。但是,當(dāng)字段A中的數(shù)據(jù)不具有分隔符的時候,數(shù)據(jù)庫可以按照預(yù)設(shè)的設(shè)置策略在字段A設(shè)置分隔符,從而使得數(shù)據(jù)庫能夠?qū)⒃O(shè)置完分隔符后的新的待處理數(shù)據(jù)根據(jù)所設(shè)置的分隔符進(jìn)行拆分處理,得到子數(shù)據(jù)以及子數(shù)據(jù)在字段A中的位置。示例性地,數(shù)據(jù)庫還可以預(yù)先設(shè)置新數(shù)據(jù)表來存儲子數(shù)據(jù)以及子數(shù)據(jù)在字段A中的位置,那么,當(dāng)數(shù)據(jù)庫得到子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置之后,就可以將所述子數(shù)據(jù)以及所述子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置保存在新數(shù)據(jù)表中。優(yōu)選地,對于字段A來說,數(shù)據(jù)庫預(yù)先設(shè)置新數(shù)據(jù)表、將字段A進(jìn)行拆分以及將拆分得到的子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置保存至新數(shù)據(jù)表中的具體實(shí)現(xiàn)形式,可以按照以下結(jié)構(gòu)化查詢語言(SQL,StructuredQueryLanguage)的程序段進(jìn)行實(shí)現(xiàn):在上面的程序段中,functionsplit_str(p_stringinvarchar2,p_delimiterinvarchar2)表示數(shù)據(jù)庫預(yù)先設(shè)置新數(shù)據(jù)表、將字段A進(jìn)行拆分以及將拆分得到的子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置保存至新數(shù)據(jù)表中這一過程的函數(shù);p_string和p_delimiter為兩個輸入?yún)?shù),前者是待處理數(shù)據(jù),后者是待處理數(shù)據(jù)里面的分隔特征;plit_table是返回值,用來返回將子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置保存之后的新數(shù)據(jù)表,該返回值的數(shù)據(jù)類型可以通過SQL語句“createorreplacetypesplit_tableastableofvarchar2(4000);”進(jìn)行設(shè)置,其中,split_table為新創(chuàng)建的數(shù)據(jù)類型,本實(shí)施例優(yōu)選地定義為數(shù)據(jù)表類型長度為4000,表中內(nèi)容的類型是varchar2可變長度類型;Pipelined是管道函數(shù),返回的結(jié)果是一個集合;piperow()語句返回待處理數(shù)據(jù)中的每一行數(shù)據(jù)。通過上述的程序段,就能夠?qū)崿F(xiàn)步驟S101中的具體過程。S102:數(shù)據(jù)庫接收待查詢數(shù)據(jù);S103:數(shù)據(jù)庫從子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置獲取待查詢數(shù)據(jù)在待處理數(shù)據(jù)中的位置;需要說明的是,當(dāng)拆分得到的子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置保存至新數(shù)據(jù)表中的時候,步驟S103具體可以包括:所述數(shù)據(jù)庫根據(jù)所述待查詢數(shù)據(jù)查詢所述新數(shù)據(jù)表;當(dāng)所述新數(shù)據(jù)表中的子數(shù)據(jù)與所述待查詢數(shù)據(jù)匹配時,獲取與所述待查詢數(shù)據(jù)匹配的子數(shù)據(jù)在所述待處理數(shù)據(jù)中的位置。詳細(xì)地,步驟S103的具體實(shí)現(xiàn)過程對于本領(lǐng)域技術(shù)人員來說屬于常用的技術(shù)手段,本實(shí)施例在此不作贅述。本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫的查詢方法,根據(jù)待處理數(shù)據(jù)所滿足的結(jié)構(gòu)規(guī)則進(jìn)行拆分,并將拆分后的子數(shù)據(jù)及對應(yīng)的主鍵進(jìn)行保存,該主鍵用于表示子數(shù)據(jù)在待處理數(shù)據(jù)中的位置;從而使得對待查詢數(shù)據(jù)進(jìn)行數(shù)據(jù)庫查詢時,可以通過對拆分后的子數(shù)據(jù)進(jìn)行查詢,并根據(jù)查詢得到的子數(shù)據(jù)所對應(yīng)的主鍵獲取待查詢數(shù)據(jù)在待處理數(shù)據(jù)中的位置。不僅提升了查詢性能,穩(wěn)定性高,能夠保證索引和數(shù)據(jù)的實(shí)時同步?;谇笆鰧?shí)施例相同的技術(shù)構(gòu)思,參見圖2,其示出了本發(fā)明實(shí)施例提供的一種數(shù)據(jù)庫的查詢裝置20,該裝置20可以應(yīng)用于數(shù)據(jù)庫中,該裝置20可以包括:拆分單元201、接收單元202和獲取單元203,其中,拆分單元201,用于根據(jù)待處理數(shù)據(jù)所滿足的結(jié)構(gòu)規(guī)則對待處理數(shù)據(jù)進(jìn)行拆分,得到子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置;接收單元202,用于接收待查詢數(shù)據(jù);獲取單元203,用于從子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置獲取待查詢數(shù)據(jù)在待處理數(shù)據(jù)中的位置。示例性地,拆分單元201,具體用于:獲取待處理數(shù)據(jù)中的分隔符;以及,根據(jù)分隔符將待處理數(shù)據(jù)拆分成至少兩個子數(shù)據(jù),并分別獲取子數(shù)據(jù)在待處理數(shù)據(jù)中的位置。進(jìn)一步地,參見圖3,該裝置20還包括設(shè)置單元204,用于當(dāng)待處理數(shù)據(jù)中不具有分隔符時,根據(jù)預(yù)設(shè)的設(shè)置策略在待處理數(shù)據(jù)中設(shè)置分隔符,得到更新后的待處理數(shù)據(jù)。示例性地,參見圖3,該裝置20還包括保存單元205,用于將子數(shù)據(jù)以及子數(shù)據(jù)在待處理數(shù)據(jù)中的位置保存在新數(shù)據(jù)表中;相應(yīng)地,獲取單元203,具體用于:根據(jù)待查詢數(shù)據(jù)查詢新數(shù)據(jù)表;以及,當(dāng)新數(shù)據(jù)表中的子數(shù)據(jù)與待查詢數(shù)據(jù)匹配時,獲取與待查詢數(shù)據(jù)匹配的子數(shù)據(jù)在待處理數(shù)據(jù)中的位置。本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫的查詢裝置,根據(jù)待處理數(shù)據(jù)所滿足的結(jié)構(gòu)規(guī)則進(jìn)行拆分,并將拆分后的子數(shù)據(jù)及對應(yīng)的主鍵進(jìn)行保存,該主鍵用于表示子數(shù)據(jù)在待處理數(shù)據(jù)中的位置;從而使得對待查詢數(shù)據(jù)進(jìn)行數(shù)據(jù)庫查詢時,可以通過對拆分后的子數(shù)據(jù)進(jìn)行查詢,并根據(jù)查詢得到的子數(shù)據(jù)所對應(yīng)的主鍵獲取待查詢數(shù)據(jù)在待處理數(shù)據(jù)中的位置。不僅提升了查詢性能,穩(wěn)定性高,能夠保證索引和數(shù)據(jù)的實(shí)時同步。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用硬件實(shí)施例、軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器和光學(xué)存儲器等)上實(shí)施的計算機(jī)程序產(chǎn)品的形式。本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計算機(jī)程序指令到通用計算機(jī)、專用計算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。這些計算機(jī)程序指令也可存儲在能引導(dǎo)計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機(jī)可讀存儲器中,使得存儲在該計算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計算機(jī)程序指令也可裝載到計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機(jī)實(shí)現(xiàn)的處理,從而在計算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個 流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。以上,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3