數(shù)據(jù)庫查詢方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及數(shù)據(jù)庫查詢方法及裝置。
【背景技術(shù)】
[0002]數(shù)據(jù)庫通常包括用于存儲數(shù)據(jù)值的一個或多個數(shù)據(jù)庫表格。為了在數(shù)據(jù)庫中檢索和操縱數(shù)據(jù),用戶、應(yīng)用程序或遠(yuǎn)程系統(tǒng)通常向數(shù)據(jù)庫管理系統(tǒng)發(fā)出數(shù)據(jù)庫查詢。數(shù)據(jù)庫查詢是指用于檢索存儲在數(shù)據(jù)庫中的數(shù)據(jù)的語句、命令或子句的集合。例如,查詢可以在數(shù)據(jù)庫中指定檢索數(shù)據(jù)的特定位置(例如,表格、行或列),或者指定如何聯(lián)接來自多個表格的列。
[0003]對于多表查詢,由于一條連接查詢語句只能用到一個數(shù)據(jù)庫連接,對于強(qiáng)大的數(shù)據(jù)庫服務(wù)器和存儲設(shè)備,只能使用到其中很小的處理能力;如果所連接查詢的表個數(shù)多、每個表數(shù)據(jù)量大,則查詢效率很低。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的主要目的在于提供一種數(shù)據(jù)庫查詢方法及裝置,旨在.解決查詢多表時,數(shù)據(jù)庫查詢的查詢低效率問題。
[0005]為實(shí)現(xiàn)上述目的,本發(fā)明提供的一種數(shù)據(jù)庫查詢方法,包括以下步驟:
[0006]接收對數(shù)據(jù)庫多表連接查詢的請求,根據(jù)請求構(gòu)造多條針對單表的結(jié)構(gòu)化查詢語句;
[0007]根據(jù)當(dāng)前數(shù)據(jù)庫資源,分配相應(yīng)的數(shù)據(jù)庫連接,用于數(shù)據(jù)庫的連接查詢;
[0008]按預(yù)設(shè)的分配規(guī)則,將所述結(jié)構(gòu)化查詢語句分配給所述數(shù)據(jù)庫連接對應(yīng)的線程執(zhí)行;
[0009]接收所述線程執(zhí)行結(jié)構(gòu)化查詢語句后返回的結(jié)果集;
[0010]從結(jié)果集中獲取數(shù)據(jù),同時拼接所獲取的數(shù)據(jù),獲得查詢結(jié)果。
[0011]優(yōu)選地,所述接收對數(shù)據(jù)庫多表連接查詢的請求,根據(jù)請求構(gòu)造多條針對單表的結(jié)構(gòu)化查詢語句之后還包括:
[0012]根據(jù)預(yù)設(shè)的排序規(guī)則對結(jié)構(gòu)化查詢語句的關(guān)鍵字段排序。
[0013]優(yōu)選地,所述接收對數(shù)據(jù)庫多表連接查詢的請求,根據(jù)請求構(gòu)造多條針對單表的結(jié)構(gòu)化查詢語句之后還包括:
[0014]根據(jù)預(yù)設(shè)的分段規(guī)則對結(jié)構(gòu)化查詢語句的關(guān)鍵字段的范圍進(jìn)行分段和按分段的結(jié)果對所述結(jié)構(gòu)化查詢語句進(jìn)行處理,生成每個分段所對應(yīng)的結(jié)構(gòu)化查詢語句;
[0015]按預(yù)設(shè)的分配規(guī)則,將所述結(jié)構(gòu)化查詢語句分配給所述數(shù)據(jù)庫連接對應(yīng)的線程執(zhí)行的步驟包括:
[0016]按照分段順序,將所述每個分段所對應(yīng)的結(jié)構(gòu)化查詢語句按預(yù)設(shè)的分配規(guī)則分配給所述數(shù)據(jù)庫連接對應(yīng)的線程執(zhí)行,且屬于同一分段的結(jié)構(gòu)化查詢語句執(zhí)行結(jié)束后,再執(zhí)行下一分段的結(jié)構(gòu)化查詢語句。
[0017]優(yōu)選地,所述預(yù)設(shè)的分配規(guī)則包括:
[0018]當(dāng)未分配的結(jié)構(gòu)化查詢語句為X個,剩余線程為I時,則對x/y進(jìn)行取整,獲得整數(shù)z,將z條結(jié)構(gòu)化查詢語句分配到剩余線程中的一個;循環(huán)執(zhí)行該步驟,直到所有的線程分配結(jié)束。
[0019]優(yōu)選地,所述根據(jù)當(dāng)前數(shù)據(jù)庫資源,分配相應(yīng)的數(shù)據(jù)庫連接,用于數(shù)據(jù)庫的連接查詢的步驟包括:
[0020]當(dāng)剩余用于查詢功能的數(shù)據(jù)庫連接為m個,剩余用戶查詢并發(fā)度為η時,則對m/n進(jìn)行取整,獲得整數(shù)a,所述結(jié)構(gòu)化查詢語句有b條,對a和b取最小值C,則為所述數(shù)據(jù)庫多表連接查詢的請求分配c個數(shù)據(jù)庫連接,用于數(shù)據(jù)庫的連接查詢;或者,
[0021]根據(jù)數(shù)據(jù)庫服務(wù)器、存儲設(shè)備的性能、當(dāng)前用戶查詢并發(fā)度和用戶查詢最大并發(fā)度中的一個或多個資源,為所述數(shù)據(jù)庫多表連接查詢的請求分配相應(yīng)的數(shù)據(jù)庫連接,用于數(shù)據(jù)庫的連接查詢。
[0022]此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種數(shù)據(jù)庫查詢裝置,所述數(shù)據(jù)庫查詢裝置包括:
[0023]構(gòu)造模塊,接收對數(shù)據(jù)庫多表連接查詢的請求,根據(jù)請求構(gòu)造多條針對單表的結(jié)構(gòu)化查詢語句;
[0024]數(shù)據(jù)庫連接分配模塊,用于根據(jù)當(dāng)前數(shù)據(jù)庫資源,分配相應(yīng)的數(shù)據(jù)庫連接,用于數(shù)據(jù)庫的連接查詢;
[0025]結(jié)構(gòu)化查詢語句分配模塊,用于按預(yù)設(shè)的分配規(guī)則,將所述結(jié)構(gòu)化查詢語句分配給所述數(shù)據(jù)庫連接對應(yīng)的線程執(zhí)行;
[0026]接收模塊,用于接收所述線程執(zhí)行結(jié)構(gòu)化查詢語句后返回的結(jié)果集;
[0027]拼接模塊,用于從結(jié)果集中獲取數(shù)據(jù),同時拼接所獲取的數(shù)據(jù),獲得查詢結(jié)果。
[0028]優(yōu)選地,所述數(shù)據(jù)庫查詢裝置還包括:
[0029]排序模塊,用于根據(jù)預(yù)設(shè)的排序規(guī)則對結(jié)構(gòu)化查詢語句的關(guān)鍵字段排序。
[0030]優(yōu)選地,所述數(shù)據(jù)庫查詢裝置還包括:
[0031]分段模塊,用于根據(jù)預(yù)設(shè)的分段規(guī)則對結(jié)構(gòu)化查詢語句的關(guān)鍵字段的范圍進(jìn)行分段和按分段的結(jié)果對所述結(jié)構(gòu)化查詢語句進(jìn)行處理,生成每個分段所對應(yīng)的結(jié)構(gòu)化查詢語句;
[0032]所述結(jié)構(gòu)化查詢語句分配模塊還用于按照分段順序,將所述每個分段所對應(yīng)的結(jié)構(gòu)化查詢語句按預(yù)設(shè)的分配規(guī)則分配給所述數(shù)據(jù)庫連接對應(yīng)的線程執(zhí)行,且屬于同一分段的結(jié)構(gòu)化查詢語句執(zhí)行結(jié)束后,再執(zhí)行下一分段的結(jié)構(gòu)化查詢語句。
[0033]優(yōu)選地,所述結(jié)構(gòu)化查詢語句分配模塊中預(yù)設(shè)的分配規(guī)則包括:當(dāng)未分配的結(jié)構(gòu)化查詢語句為X個,剩余線程為y時,則對x/y進(jìn)行取整,獲得整數(shù)Z,將Z條結(jié)構(gòu)化查詢語句分配到剩余線程中的一個;循環(huán)執(zhí)行該分配規(guī)則,直到所有的線程分配結(jié)束。
[0034]優(yōu)選地,所述數(shù)據(jù)庫連接分配模塊用于當(dāng)剩余用于查詢功能的數(shù)據(jù)庫連接為m個,剩余用戶查詢并發(fā)度為η時,則對m/n進(jìn)行取整,獲得整數(shù)a,所述結(jié)構(gòu)化查詢語句有b條,對a和b取最小值C,則為所述數(shù)據(jù)庫多表連接查詢的請求分配c個數(shù)據(jù)庫連接,用于數(shù)據(jù)庫的連接查詢;或者,
[0035]根據(jù)數(shù)據(jù)庫服務(wù)器、存儲設(shè)備的性能、當(dāng)前用戶查詢并發(fā)度和用戶查詢最大并發(fā)度中的一個或多個資源,為所述數(shù)據(jù)庫多表連接查詢的請求分配相應(yīng)的數(shù)據(jù)庫連接,用于數(shù)據(jù)庫的連接查詢。
[0036]本發(fā)明通過為一次數(shù)據(jù)庫查詢分配多條數(shù)據(jù)庫連接,使得查詢多表可同時進(jìn)行,充分使用了數(shù)據(jù)庫資源,在滿足業(yè)務(wù)統(tǒng)計(jì)的同時大大提升了查詢效率。
【附圖說明】
[0037]圖1為本發(fā)明數(shù)據(jù)庫查詢方法第一實(shí)施例的流程示意圖;
[0038]圖2為本發(fā)明數(shù)據(jù)庫查詢方法第二實(shí)施例的流程示意圖;
[0039]圖3為本發(fā)明數(shù)據(jù)庫查詢方法第三實(shí)施例的流程示意圖;
[0040]圖4為本發(fā)明數(shù)據(jù)庫查詢裝置第一實(shí)施例的功能模塊示意圖;
[0041]圖5為本發(fā)明數(shù)據(jù)庫查詢裝置第二實(shí)施例的功能模塊示意圖;
[0042]圖6為本發(fā)明數(shù)據(jù)庫查詢裝置第三實(shí)施例的功能模塊示意圖。
[0043]本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
【具體實(shí)施方式】
[0044]應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0045]本發(fā)明提供一種數(shù)據(jù)庫查詢方法。參照圖1,圖1為本發(fā)明數(shù)據(jù)庫查詢方法第一實(shí)施例的流程示意圖。該實(shí)施例中的數(shù)據(jù)庫查詢方法包括以下步驟:
[0046]步驟S10、接收對數(shù)據(jù)庫多表連接查詢的請求,根據(jù)請求構(gòu)造多條針對單表的結(jié)構(gòu)化查詢語句;
[0047]實(shí)時監(jiān)測終端發(fā)來的數(shù)據(jù)庫多表連接查詢的請求,當(dāng)接收到終端發(fā)來數(shù)據(jù)庫多表連接查詢的請求后,根據(jù)數(shù)據(jù)庫多表連接查詢的請求中的字段以及表格信息構(gòu)造為多條針對單表的結(jié)構(gòu)化查詢語句,將所述結(jié)構(gòu)化查詢語句存入內(nèi)存中。
[0048]例如,所述接收對數(shù)據(jù)庫多表連接查詢的請求,構(gòu)造為多條針對單表的結(jié)構(gòu)化查詢語句可為:
[0049]數(shù)據(jù)庫多表連接查詢的請求:selectA.begintime, A.locat1n, A.al, A.a2,B.bl,B.b2 from A,B where A.begintime = B.begintime and A.1coat1n = B.locat1n,構(gòu)造為兩條針對單表的結(jié)構(gòu)化查詢語句:select begintime, locat1n, al, a2 from A以及select begintime, locat1n, bl