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