用于檢索的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明實(shí)施例涉及數(shù)據(jù)庫(kù)檢索領(lǐng)域,并且更具體地,涉及一種用于檢索的方法和 裝置。
【背景技術(shù)】
[0002] 在數(shù)據(jù)庫(kù)的檢索過(guò)程中,通常采用索引來(lái)提高檢索速度,例如,最常用的索引為B+ 樹(shù)索引。在索引字段上進(jìn)行查詢的時(shí)候,查詢速度往往能夠得到很大的提升。但是,在索引 字段上包括函數(shù)的情況下,索引很難發(fā)揮作用,基本上只能采用順序掃描而無(wú)法使用索引 掃描。在實(shí)際的業(yè)務(wù)場(chǎng)景中,在索引字段上往往都包括函數(shù),例如,判斷兩個(gè)日期在5天之 內(nèi)(ABS(tl-t2)〈5),或者判斷是不是2014年的時(shí)間(Year (tl) =2014)等,在這些情況下, 索引往往無(wú)法發(fā)揮其作用,影響了檢索速度。
[0003]目前,為了解決這個(gè)問(wèn)題,提出了函數(shù)索引技術(shù),即針對(duì)檢索的函數(shù)建立對(duì)應(yīng)的 函數(shù)索引,如針對(duì)ename字段上建substr的索引,create index emp_ename_substr on eemp(substr(ename, 1,2))。但是,在數(shù)據(jù)更新的情況下,由于索引字段本身的值和函數(shù)計(jì) 算之后的值并沒(méi)有直接的對(duì)應(yīng)關(guān)系,函數(shù)索引的維護(hù)代價(jià)很高,導(dǎo)致實(shí)際使用的場(chǎng)合很少。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明實(shí)施例提供一種用于檢索的方法和裝置,能夠有效提尚檢索的效率。
[0005] 第一方面提供了一種用于檢索的方法,該方法包括:
[0006] 獲取檢索表達(dá)式,該檢索表達(dá)式用于在數(shù)據(jù)庫(kù)中進(jìn)行檢索;
[0007] 根據(jù)該檢索表達(dá)式的變量及操作符,從預(yù)設(shè)的表達(dá)式集中選取該檢索表達(dá)式的匹 配表達(dá)式;
[0008] 從該檢索表達(dá)式的變量中選取目標(biāo)變量,該目標(biāo)變量在該數(shù)據(jù)庫(kù)中建有索引;
[0009] 根據(jù)該匹配表達(dá)式以及該目標(biāo)變量,將該檢索表達(dá)式轉(zhuǎn)換成等價(jià)的Sargable表 達(dá)式;
[0010] 根據(jù)該Sargable表達(dá)式,通過(guò)該索引,在該數(shù)據(jù)庫(kù)中進(jìn)行檢索。
[0011] 結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,根據(jù)該匹配表達(dá)式以及 該目標(biāo)變量,將該檢索表達(dá)式轉(zhuǎn)換成等價(jià)的Sargable表達(dá)式,包括:
[0012] 根據(jù)該匹配表達(dá)式以及該目標(biāo)變量,通過(guò)預(yù)設(shè)的映射表,確定對(duì)應(yīng)的Sargable表 達(dá)式,其中,該映射表中記錄有該表達(dá)式集中的各表達(dá)式、該各表達(dá)式中的建立有索引的變 量以及Sargable表達(dá)式的映射關(guān)系。
[0013] 結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的 實(shí)現(xiàn)方式中,從該檢索表達(dá)式的變量中選取目標(biāo)變量,包括:
[0014] 根據(jù)該數(shù)據(jù)庫(kù)的索引信息,從該檢索表達(dá)式的變量中選取目標(biāo)變量,其中,該數(shù)據(jù) 庫(kù)的索引信息中記錄有在該數(shù)據(jù)庫(kù)中建立有索引的變量。
[0015] 結(jié)合第一方面或第一方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第一方面的第三 種可能的實(shí)現(xiàn)方式中,根據(jù)該匹配表達(dá)式以及該目標(biāo)變量,將該檢索表達(dá)式轉(zhuǎn)換成等價(jià)的Sargable表達(dá)式,包括:
[0016] 在該檢索表達(dá)式為函數(shù)表達(dá)式或操作表達(dá)式的情況下,根據(jù)該匹配表達(dá)式以及該 目標(biāo)變量,將該檢索表達(dá)式轉(zhuǎn)換成等價(jià)的Sargable表達(dá)式;
[0017] 該方法還包括:
[0018] 在該檢索表達(dá)式為條件表達(dá)式的情況下,根據(jù)該檢索表達(dá)式,在該數(shù)據(jù)庫(kù)中進(jìn)行 檢索。
[0019] 結(jié)合第一方面或第一方面的第一種至第三種可能的實(shí)現(xiàn)方式中的人一種可能的 實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,該檢索表達(dá)式為連接場(chǎng)景下的或者查 詢場(chǎng)景下的檢索表達(dá)式。
[0020] 第二方面,提供一種用于檢索的裝置,該裝置包括:
[0021] 獲取模塊,用于獲取檢索表達(dá)式,該檢索表達(dá)式用于在數(shù)據(jù)庫(kù)中進(jìn)行檢索;
[0022] 第一選取模塊,用于根據(jù)該獲取模塊獲取的該檢索表達(dá)式的變量及操作符,從預(yù) 設(shè)的表達(dá)式集中選取該檢索表達(dá)式的匹配表達(dá)式;
[0023] 第二選取模塊,用于從該獲取模塊獲取的該檢索表達(dá)式的變量中選取目標(biāo)變量, 該目標(biāo)變量在該數(shù)據(jù)庫(kù)中建有索引;
[0024] 轉(zhuǎn)換模塊,用于根據(jù)該第一選取模塊選取的該匹配表達(dá)式以及該第二選取模塊選 取的該目標(biāo)變量,將該檢索表達(dá)式轉(zhuǎn)換成等價(jià)的Sargable表達(dá)式;
[0025] 第一檢索模塊,用于根據(jù)該轉(zhuǎn)換模塊轉(zhuǎn)換所得的該Sargable表達(dá)式,通過(guò)該索 弓丨,在該數(shù)據(jù)庫(kù)中進(jìn)行檢索。
[0026] 結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,該轉(zhuǎn)換模塊具體用于, 根據(jù)該匹配表達(dá)式以及該目標(biāo)變量,通過(guò)預(yù)設(shè)的映射表,確定對(duì)應(yīng)的Sargab 1 e表達(dá)式,其 中,該映射表中記錄有該表達(dá)式集中的各表達(dá)式、該各表達(dá)式中的建立有索引的變量以及 Sargable表達(dá)式的映射關(guān)系。
[0027] 結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的 實(shí)現(xiàn)方式中,該第二選取模塊具體用于,根據(jù)該數(shù)據(jù)庫(kù)的索引信息,從該檢索表達(dá)式的變量 中選取目標(biāo)變量,其中,該數(shù)據(jù)庫(kù)的索引信息中記錄有在該數(shù)據(jù)庫(kù)中建立有索引的變量。
[0028] 結(jié)合第一方面或第一方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第一方面的第三 種可能的實(shí)現(xiàn)方式中,該轉(zhuǎn)換模塊具體用于,在該檢索表達(dá)式為函數(shù)表達(dá)式或操作表達(dá)式 的情況下,根據(jù)該匹配表達(dá)式以及該目標(biāo)變量,將該檢索表達(dá)式轉(zhuǎn)換成等價(jià)的Sargable表 達(dá)式;
[0029] 該裝置還包括:
[0030] 第二檢索模塊,用于在該檢索表達(dá)式為條件表達(dá)式的情況下,根據(jù)該檢索表達(dá)式, 在該數(shù)據(jù)庫(kù)中進(jìn)行檢索。
[0031] 結(jié)合第一方面或第一方面的第一種至第三種可能的實(shí)現(xiàn)方式中的人一種可能的 實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,該檢索表達(dá)式為連接場(chǎng)景下的或者查 詢場(chǎng)景下的檢索表達(dá)式。
[0032] 基于上述技術(shù)方案,本發(fā)明實(shí)施例提供的用于檢索的方法和裝置,通過(guò)將檢索表 達(dá)式轉(zhuǎn)換為Sargable表達(dá)式,能夠?qū)崿F(xiàn)索引檢索,能夠有效提高檢索的效率。
【附圖說(shuō)明】
[0033] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中 所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí) 施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附 圖獲得其他的附圖。
[0034] 圖1示出了本發(fā)明實(shí)施例提供的用于檢索的方法的示意性流程圖。
[0035] 圖2示出了本發(fā)明實(shí)施例提供的用于檢索的方法的另一示意性流程圖。
[0036] 圖3示出了本發(fā)明實(shí)施例提供的用于檢索的方法的再一示意性流程圖。
[0037] 圖4示出了本發(fā)明實(shí)施例提供的用于檢索的方法的再一示意性流程圖。
[0038] 圖5示出了本發(fā)明實(shí)施例提供的用于檢索的裝置的示意性框圖。
[0039] 圖6示出了本發(fā)明實(shí)施例提供的用于檢索的裝置的另一示意性框圖。
【具體實(shí)施方式】
[0040] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā) 明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施 例,都屬于本發(fā)明保護(hù)的范圍。
[0041] 為了方便理解本發(fā)明實(shí)施例,首先在此介紹幾個(gè)相關(guān)的概念:
[0042] 1)數(shù)據(jù)庫(kù)管理系統(tǒng)
[0043] 數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System,簡(jiǎn)稱為"DBMS")是一種操縱和管 理數(shù)據(jù)庫(kù)的大型軟件,用于建立、使用和維護(hù)數(shù)據(jù)庫(kù)。它對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理和控制, 以保證數(shù)據(jù)庫(kù)的安全性和完整性。
[0044] 2)關(guān)系數(shù)據(jù)庫(kù)
[0045] 關(guān)系數(shù)據(jù)庫(kù)是建立在關(guān)系數(shù)據(jù)庫(kù)模型基礎(chǔ)上的數(shù)據(jù)庫(kù)。
[0046] 關(guān)系型數(shù)據(jù)庫(kù)的重要元素包括數(shù)據(jù)表和表連接,借助各種類(lèi)型的表連接,可以將 平鋪直敘的信息加以組裝拼接。
[0047]3)索引
[0048] 索引是對(duì)記錄集的多個(gè)字段進(jìn)行排序的方法,在一張表中為一個(gè)字段創(chuàng)建一個(gè)索 弓丨,將創(chuàng)建另外一個(gè)數(shù)據(jù)結(jié)構(gòu),包含字段數(shù)值以及指向相關(guān)記錄的指針,然后對(duì)這個(gè)索引結(jié) 構(gòu)進(jìn)行排序,允許在該數(shù)據(jù)上進(jìn)行二分法排序。
[0049] 索引的目的是在可能的情況下加速查詢,所以索引應(yīng)該建立在主鍵列、惟一約束 列、條件語(yǔ)句常用列。
[0050] 4) Sargable 表達(dá)式
[0051] 在關(guān)系數(shù)據(jù)庫(kù)中,如果數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System,簡(jiǎn)稱為 "DBMS")能夠利用索引對(duì)查詢中的某個(gè)表達(dá)式的檢索進(jìn)行加速,該表達(dá)式被稱為Sargable 表達(dá)式,該術(shù)語(yǔ)來(lái)源于Search Argument Able的縮寫(xiě),也可稱之為可SARG的表達(dá)式。
[0052] Sargable表達(dá)式通常是指列和常量的比較。如果一個(gè)檢索表達(dá)式是sargable (可 SARG)表達(dá)式,意味著它能利用索引加速查詢的完成。
[0053] 如果一個(gè)檢索表達(dá)式是不可SARG的,意味著該檢索表達(dá)式不能利用索引(至少部 分不能利用)來(lái)執(zhí)行全表或索引掃描,會(huì)引起查詢性能的下降。下列表達(dá)式,均為不可SARG 的表達(dá)式:
[0054] "is null","! = NOT",',Not Exist",',Not in",',Not Like","Like500%"。此外,在列上使用包含函數(shù)的的表達(dá)式、表達(dá)式兩邊都使用相同列的 表達(dá)式,以及,和不同列(非常量)比較的表達(dá)式,都不是可SARG的表達(dá)式。
[0055] 圖1示出了本發(fā)明實(shí)施例的用于檢索的方法100,該方法100包括:
[0056] S110,獲取檢索