本發(fā)明涉及計(jì)算機(jī)軟件技術(shù),尤其涉及數(shù)據(jù)庫(kù)查找技術(shù)。
背景技術(shù):
數(shù)據(jù)庫(kù)在使用like查詢的時(shí)候,尤其是sql數(shù)據(jù)庫(kù),前置%通配符(如:‘%abc’)將無(wú)法使用索引,會(huì)導(dǎo)致全表掃描,引起性能問(wèn)題。目前都是通過(guò)全文搜索解決這個(gè)問(wèn)題,全文搜索不但實(shí)施復(fù)雜,而且應(yīng)用程序開(kāi)發(fā)使用的很多orm不支持全文搜索語(yǔ)法,即使支持,使用起來(lái)也很麻煩。
技術(shù)實(shí)現(xiàn)要素:
為了克服現(xiàn)有技術(shù)的不足,本發(fā)明的目的之一在于提供一種數(shù)據(jù)庫(kù)索引查找方法,其能解決無(wú)法使用索引的問(wèn)題。
本發(fā)明的目的之二在于提供一種數(shù)據(jù)庫(kù)索引查找裝置,其能解決無(wú)法使用索引的問(wèn)題。
本發(fā)明的目的之三在于提供一種用戶終端,其能解決無(wú)法使用索引的問(wèn)題。
為了實(shí)現(xiàn)上述目的之一,本發(fā)明所采用的技術(shù)方案如下:
一種數(shù)據(jù)庫(kù)索引查找方法,其特征在于,包括以下步驟:
接收查詢指令,所述查詢指令包括待查字符片段和查詢符;
根據(jù)所述待查字符片段,從分片段數(shù)據(jù)存儲(chǔ)表中匹配出對(duì)應(yīng)的一個(gè)或多個(gè)字符片段,并根據(jù)所述字符片段對(duì)應(yīng)得到一個(gè)或多個(gè)主鍵;
根據(jù)一個(gè)或多個(gè)所述主鍵,從源表中匹配出對(duì)應(yīng)的一條或多條源字段內(nèi)容的記錄;
其中,所述分片段數(shù)據(jù)存儲(chǔ)表包括字符片段與主鍵的對(duì)應(yīng)關(guān)系;所述源表包括主鍵與源字段內(nèi)容的對(duì)應(yīng)關(guān)系;分片段數(shù)據(jù)存儲(chǔ)表中的多個(gè)字符片段由預(yù)設(shè)規(guī)則對(duì)每一個(gè)源字段內(nèi)容拆分得到,由同一個(gè)源字段內(nèi)容拆分得到的多個(gè)字符片段對(duì)應(yīng)關(guān)聯(lián)的主鍵相同。
優(yōu)選的,所述查詢符為sql通配符。
優(yōu)選的,所述查詢符連接在待查字符片段后。
優(yōu)選的,所述數(shù)據(jù)庫(kù)為sql數(shù)據(jù)庫(kù)。
優(yōu)選的,所述預(yù)設(shè)規(guī)則為從左到右或從右到左對(duì)源字段內(nèi)容中依次刪除一個(gè)字符,每刪除一次,得到對(duì)應(yīng)的一個(gè)字符片段。
為了實(shí)現(xiàn)上述目的之二,本發(fā)明所采用的技術(shù)方案如下:
一種數(shù)據(jù)庫(kù)索引查找裝置,其特征在于,包括以下模塊:
接收模塊,用于接收查詢指令,所述查詢指令包括待查字符片段和查詢符;
查詢模塊,用于根據(jù)所述待查字符片段,從分片段數(shù)據(jù)存儲(chǔ)表中匹配出對(duì)應(yīng)的一個(gè)或多個(gè)字符片段,并根據(jù)所述字符片段對(duì)應(yīng)得到一個(gè)或多個(gè)主鍵;
匹配模塊,用于根據(jù)一個(gè)或多個(gè)所述主鍵,從源表中匹配出對(duì)應(yīng)的一條或多條源字段內(nèi)容的記錄;
其中,所述分片段數(shù)據(jù)存儲(chǔ)表包括字符片段與主鍵的對(duì)應(yīng)關(guān)系;所述源表包括主鍵與源字段內(nèi)容的對(duì)應(yīng)關(guān)系;分片段數(shù)據(jù)存儲(chǔ)表中的多個(gè)字符片段由預(yù)設(shè)規(guī)則對(duì)每一個(gè)源字段內(nèi)容拆分得到,由同一個(gè)源字段內(nèi)容拆分得到的多個(gè)字符片段對(duì)應(yīng)關(guān)聯(lián)的主鍵相同。
優(yōu)選的,所述查詢符連接在待查字符片段后。
優(yōu)選的,所述數(shù)據(jù)庫(kù)為sql數(shù)據(jù)庫(kù)。
優(yōu)選的,所述預(yù)設(shè)規(guī)則為從左到右或從右到左對(duì)源字段內(nèi)容中依次刪除一個(gè)字符,每刪除一次,得到對(duì)應(yīng)的一個(gè)字符片段。
為了實(shí)現(xiàn)上述目的之三,本發(fā)明所采用的技術(shù)方案如下:
一種用戶終端,其特征在于,包括:
存儲(chǔ)器,用于存儲(chǔ)程序指令;
處理器,用于運(yùn)行所述程序指令,以執(zhí)行以下步驟:
接收查詢指令,所述查詢指令包括待查字符片段和查詢符;
根據(jù)所述待查字符片段,從分片段數(shù)據(jù)存儲(chǔ)表中匹配出對(duì)應(yīng)的一個(gè)或多個(gè)字符片段,并根據(jù)所述字符片段對(duì)應(yīng)得到一個(gè)或多個(gè)主鍵;
根據(jù)一個(gè)或多個(gè)所述主鍵,從源表中匹配出對(duì)應(yīng)的一條或多條源字段內(nèi)容的記錄;
其中,所述分片段數(shù)據(jù)存儲(chǔ)表包括字符片段與主鍵的對(duì)應(yīng)關(guān)系;所述源表包括主鍵與源字段內(nèi)容的對(duì)應(yīng)關(guān)系;分片段數(shù)據(jù)存儲(chǔ)表中的多個(gè)字符片段由預(yù)設(shè)規(guī)則對(duì)每一個(gè)源字段內(nèi)容拆分得到,由同一個(gè)源字段內(nèi)容拆分得到的多個(gè)字符片段對(duì)應(yīng)關(guān)聯(lián)的主鍵相同。
優(yōu)選的,所述查詢符為sql通配符。
優(yōu)選的,所述查詢符連接在待查字符片段后。
優(yōu)選的,所述數(shù)據(jù)庫(kù)為sql數(shù)據(jù)庫(kù)。
優(yōu)選的,所述預(yù)設(shè)規(guī)則為從左到右或從右到左對(duì)源字段內(nèi)容中依次刪除一個(gè)字符,每刪除一次,得到對(duì)應(yīng)的一個(gè)字符片段。
相比現(xiàn)有技術(shù),本發(fā)明的有益效果在于:
通過(guò)把需要查找的數(shù)據(jù)(即源字段內(nèi)容)拆分為數(shù)據(jù)小片段(即字符片段),然后和源表關(guān)聯(lián),在查詢的時(shí)候通過(guò)后置通配符的方式,解決前置通配符模式使用like查詢導(dǎo)致全表掃描的問(wèn)題,提高查詢性能。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例一的數(shù)據(jù)庫(kù)索引查找方法的流程圖;
圖2為本發(fā)明的預(yù)設(shè)規(guī)則的示意圖;
圖3為本發(fā)明實(shí)施例二的數(shù)據(jù)庫(kù)索引查找裝置的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例三的用戶終端的結(jié)構(gòu)示意圖;
圖5為本發(fā)明源表的示意圖;
圖6為本發(fā)明分片段數(shù)據(jù)存儲(chǔ)表的示意圖;
圖7為本發(fā)明執(zhí)行代碼后顯示的表單內(nèi)容示意圖。
具體實(shí)施方式
下面,結(jié)合附圖以及具體實(shí)施方式,對(duì)本發(fā)明做進(jìn)一步描述:
實(shí)施例一
如圖1所示,一種數(shù)據(jù)庫(kù)索引查找方法,其包括以下步驟:
步驟s1、接收查詢指令,所述查詢指令包括待查字符片段和查詢符;
步驟s2、根據(jù)所述待查字符片段,從分片段數(shù)據(jù)存儲(chǔ)表中匹配出對(duì)應(yīng)的一個(gè)或多個(gè)字符片段,并根據(jù)所述字符片段對(duì)應(yīng)得到一個(gè)或多個(gè)主鍵;
步驟s3、根據(jù)一個(gè)或多個(gè)所述主鍵,從源表中匹配出對(duì)應(yīng)的一條或多條源字段內(nèi)容的記錄;
步驟s4、將對(duì)應(yīng)的主鍵、匹配出來(lái)的源字段內(nèi)容和匹配出來(lái)的字符片段三者進(jìn)行對(duì)應(yīng)關(guān)聯(lián)顯示。
其中,所述分片段數(shù)據(jù)存儲(chǔ)表包括字符片段與主鍵的對(duì)應(yīng)關(guān)系;所述源表包括主鍵與源字段內(nèi)容的對(duì)應(yīng)關(guān)系;分片段數(shù)據(jù)存儲(chǔ)表中的多個(gè)字符片段由預(yù)設(shè)規(guī)則對(duì)每一個(gè)源字段內(nèi)容拆分得到,由同一個(gè)源字段內(nèi)容拆分得到的多個(gè)字符片段對(duì)應(yīng)關(guān)聯(lián)的主鍵相同。
本實(shí)施例的數(shù)據(jù)庫(kù)為sql數(shù)據(jù)庫(kù)。所述查詢符為sql通配符,sql通配符一般包括如表1所示。所述查詢符連接在待查字符片段后(如abc%)。
表1
本實(shí)施例采用后置通配符%的方式為例進(jìn)行索引檢索說(shuō)明。
所述預(yù)設(shè)規(guī)則為從左到右或從右到左對(duì)源字段內(nèi)容中依次刪除一個(gè)字符,每刪除一次,得到對(duì)應(yīng)的一個(gè)字符片段。預(yù)設(shè)規(guī)則示例如圖2所示,以從左到右為例,對(duì)源字段內(nèi)容hudecovacrescent進(jìn)行拆分,圖2中每一行對(duì)應(yīng)一個(gè)字符片段,并存儲(chǔ)分片段數(shù)據(jù)存儲(chǔ)表中。
實(shí)施例二
如圖3所示,為與實(shí)施例一的方法流程一一對(duì)應(yīng)形成的虛擬裝置,即提供了一種數(shù)據(jù)庫(kù)索引查找裝置,其包括以下模塊:
接收模塊,用于接收查詢指令,所述查詢指令包括待查字符片段和查詢符;
查詢模塊,用于根據(jù)所述待查字符片段,從分片段數(shù)據(jù)存儲(chǔ)表中匹配出對(duì)應(yīng)的一個(gè)或多個(gè)字符片段,并根據(jù)所述字符片段對(duì)應(yīng)得到一個(gè)或多個(gè)主鍵;
匹配模塊,用于根據(jù)一個(gè)或多個(gè)所述主鍵,從源表中匹配出對(duì)應(yīng)的一條或多條源字段內(nèi)容的記錄;
關(guān)聯(lián)模塊,用于將對(duì)應(yīng)的主鍵、匹配出來(lái)的源字段內(nèi)容和匹配出來(lái)的字符片段三者進(jìn)行對(duì)應(yīng)關(guān)聯(lián)顯示。
其中,所述分片段數(shù)據(jù)存儲(chǔ)表包括字符片段與主鍵的對(duì)應(yīng)關(guān)系;所述源表包括主鍵與源字段內(nèi)容的對(duì)應(yīng)關(guān)系;分片段數(shù)據(jù)存儲(chǔ)表中的多個(gè)字符片段由預(yù)設(shè)規(guī)則對(duì)每一個(gè)源字段內(nèi)容拆分得到,由同一個(gè)源字段內(nèi)容拆分得到的多個(gè)字符片段對(duì)應(yīng)關(guān)聯(lián)的主鍵相同。
實(shí)施例三
如圖4所示,為了實(shí)現(xiàn)實(shí)施例一的方法流程,提供了一種實(shí)體裝置,即一種用戶終端,其包括:
存儲(chǔ)器,用于存儲(chǔ)程序指令;
處理器,用于運(yùn)行所述程序指令,以執(zhí)行以下步驟:
接收查詢指令,所述查詢指令包括待查字符片段和查詢符;
根據(jù)所述待查字符片段,從分片段數(shù)據(jù)存儲(chǔ)表中匹配出對(duì)應(yīng)的一個(gè)或多個(gè)字符片段,并根據(jù)所述字符片段對(duì)應(yīng)得到一個(gè)或多個(gè)主鍵;
根據(jù)一個(gè)或多個(gè)所述主鍵,從源表中匹配出對(duì)應(yīng)的一條或多條源字段內(nèi)容的記錄;
將對(duì)應(yīng)的主鍵、匹配出來(lái)的源字段內(nèi)容和匹配出來(lái)的字符片段三者進(jìn)行對(duì)應(yīng)關(guān)聯(lián)顯示。
其中,所述分片段數(shù)據(jù)存儲(chǔ)表包括字符片段與主鍵的對(duì)應(yīng)關(guān)系;所述源表包括主鍵與源字段內(nèi)容的對(duì)應(yīng)關(guān)系;分片段數(shù)據(jù)存儲(chǔ)表中的多個(gè)字符片段由預(yù)設(shè)規(guī)則對(duì)每一個(gè)源字段內(nèi)容拆分得到,由同一個(gè)源字段內(nèi)容拆分得到的多個(gè)字符片段對(duì)應(yīng)關(guān)聯(lián)的主鍵相同。
下面,以實(shí)際的計(jì)算機(jī)程序代碼實(shí)現(xiàn)示例,對(duì)本發(fā)明進(jìn)行具體說(shuō)明。
如圖5所示,查詢?cè)幢韀person].[address]中addressline1字段包含crescent待查字符片段的數(shù)據(jù)記錄,源表[person].[address]主鍵字段為addressid。
如圖6所示,以源表[person].[address]的主鍵addressid1對(duì)應(yīng)的源字段內(nèi)容1970napact.進(jìn)行拆分為示例,得到分片段數(shù)據(jù)存儲(chǔ)表t_literalfragments。其他addressid對(duì)應(yīng)的源字段內(nèi)容也進(jìn)行同樣的拆分。其中,srcrefid為分片段數(shù)據(jù)存儲(chǔ)表t_literalfragments的主鍵字段,fragment為分片段數(shù)據(jù)存儲(chǔ)表t_literalfragments的字符片段字段。分片段數(shù)據(jù)存儲(chǔ)表t_literalfragments的主鍵與源表[person].[address]的主鍵對(duì)應(yīng)關(guān)聯(lián)。
根據(jù)執(zhí)行以下代碼,得到如圖7所示表單。
selecta.addressid,a.addressline1,b.fragment
from[person].[address]asa
innerjoint_literalfragmentsasb
ona.addressid=b.srcrefid//源表主鍵與分片段數(shù)據(jù)存儲(chǔ)表主鍵對(duì)應(yīng)關(guān)聯(lián)
andb.fragmentlike‘crescent%’//通過(guò)后置通配符%,在分片段數(shù)據(jù)存儲(chǔ)表的fragment字段中匹配含有crescent待查字符片段的數(shù)據(jù)記錄
orderbya.addressid
利用sql通過(guò)后置%通配符的方式使用like查詢可以使用索引的特點(diǎn),本實(shí)施例通過(guò)把需要使用前置%通配符查找的數(shù)據(jù)拆分為數(shù)據(jù)小片段,然后和源表關(guān)聯(lián),在查詢的時(shí)候通過(guò)后置%通配符的方式,解決前置%通配符模式使用like查詢導(dǎo)致全表掃描的問(wèn)題,提高查詢性能。
對(duì)本領(lǐng)域的技術(shù)人員來(lái)說(shuō),可根據(jù)以上描述的技術(shù)方案以及構(gòu)思,做出其它各種相應(yīng)的改變以及形變,而所有的這些改變以及形變都應(yīng)該屬于本發(fā)明權(quán)利要求的保護(hù)范圍之內(nèi)。