麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種SQL優(yōu)化方法及設(shè)備與流程

文檔序號(hào):11063566閱讀:327來源:國(guó)知局
本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種SQL優(yōu)化方法及設(shè)備。
背景技術(shù)
::隨著大數(shù)據(jù)時(shí)代的到來,數(shù)據(jù)庫(kù)應(yīng)用越來越多,處理的數(shù)據(jù)量也越來越大,處理邏輯也越來越復(fù)雜,通常的應(yīng)用已經(jīng)不再是幾個(gè)簡(jiǎn)單的SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)語句的操作,大型應(yīng)用往往包含成千上萬個(gè)SQL操作,如何快速處理海量數(shù)據(jù)已經(jīng)成為業(yè)界的一個(gè)難題。現(xiàn)有技術(shù)中的SQL優(yōu)化技術(shù)主要聚焦在單個(gè)SQL語句的執(zhí)行計(jì)劃的優(yōu)化,例如joinreorder(加入排序)和predicatepushdown(謂詞下推)等;現(xiàn)有技術(shù)對(duì)單個(gè)SQL語句進(jìn)行優(yōu)化都是通過對(duì)SQL語句中的多個(gè)表之間的可能出現(xiàn)的連接關(guān)系或聚集關(guān)系進(jìn)行預(yù)先定義,并預(yù)先計(jì)算定義好SQL語句下的各個(gè)表對(duì)應(yīng)的操作結(jié)果,以待需要對(duì)有連接關(guān)系或聚集關(guān)系的表進(jìn)行相應(yīng)的操作時(shí),可以快速地得到預(yù)先定義好的操作結(jié)果,進(jìn)而達(dá)到提高SQL的性能的目的。但是預(yù)先計(jì)算無法覆蓋所有SQL語句,只對(duì)單個(gè)SQL語句進(jìn)行優(yōu)化,且預(yù)先計(jì)算是基于已過時(shí)的表進(jìn)行的,當(dāng)這些表被修改后,原來的預(yù)先定義好的操作結(jié)果就無法反應(yīng)真實(shí)狀況,進(jìn)而不能滿足對(duì)實(shí)時(shí)的表的需求,可能出現(xiàn)預(yù)先計(jì)算優(yōu)化好的表用不到或失效,從而造成資源的浪費(fèi);又由于單個(gè)SQL語句沒有與其他SQL語句之間的上下文銜接信息,導(dǎo)致整體優(yōu)化效果不佳。因此,現(xiàn)有技術(shù)中通過對(duì)單個(gè)SQL語句進(jìn)行預(yù)先優(yōu)化,導(dǎo)致預(yù)先優(yōu)化的SQL語句對(duì)應(yīng)的表用不到或優(yōu)化失效,造成整體優(yōu)化效果不佳且資源浪費(fèi)。技術(shù)實(shí)現(xiàn)要素:本申請(qǐng)的一個(gè)目的是提供一種SQL優(yōu)化方法及設(shè)備,解決現(xiàn)有技術(shù)中通過對(duì)單個(gè)SQL語句進(jìn)行預(yù)先優(yōu)化,導(dǎo)致預(yù)先優(yōu)化的SQL語句對(duì)應(yīng)的表用不到或優(yōu)化失效的問題,同時(shí)解決整體優(yōu)化效果不佳且資源浪費(fèi)的問題。根據(jù)本申請(qǐng)的一個(gè)方面,提供了一種SQL優(yōu)化方法,該方法包括:對(duì)至少兩條SQL語句進(jìn)行分析并提取,得到SQL語句的基本信息、每一條所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系;基于所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表得到初步過濾表后的SQL語句;刪除所述初步過濾表后的SQL語句中的無用列,得到優(yōu)化后的SQL語句。進(jìn)一步地,上述方法中,所述對(duì)至少兩條SQL語句進(jìn)行分析并提取,得到SQL語句的基本信息、每一條所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,包括:獲取至少兩條SQL語句;通過詞法、語法和語義分析對(duì)每一條SQL語句進(jìn)行分析,得到包含有每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系的中間表示信息;對(duì)所述中間表示信息進(jìn)行提取,得到每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系。進(jìn)一步地,上述方法中,所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系包括:所述SQL語句對(duì)應(yīng)的表的基本信息;所述表的列的基本信息。進(jìn)一步地,上述方法中,所述基于所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表得到初步過濾表后的SQL語句,包括:基于表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,將無引用關(guān)系的臨時(shí)表和/或未預(yù)定義的全局表從所述SQL語句對(duì)應(yīng)的所述表中刪除,得到初步過濾表后的SQL語句。進(jìn)一步地,上述方法中,所述基于所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表得到初步過濾表后的SQL語句之后,還包括:基于數(shù)據(jù)流方程組對(duì)每一條SQL語句進(jìn)行數(shù)據(jù)流分析,得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表;檢測(cè)所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的可內(nèi)斂的表并將其內(nèi)斂至唯一引用點(diǎn),得到進(jìn)一步過濾表后的SQL語句。進(jìn)一步地,上述方法中,所述數(shù)據(jù)流方程組包括以下至少任一項(xiàng):前一個(gè)SQL語句的輸出表集合對(duì)應(yīng)的方程;當(dāng)前創(chuàng)建或修改的表集合對(duì)應(yīng)的方程;被修改前的表和當(dāng)前刪除的表的表集合對(duì)應(yīng)的方程;當(dāng)前輸出表集合對(duì)應(yīng)的方程。進(jìn)一步地,上述方法中,所述檢測(cè)所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的可內(nèi)斂的表并將其內(nèi)斂至唯一引用點(diǎn),得到進(jìn)一步過濾表后的SQL語句,包括將所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的只有一個(gè)引用點(diǎn)的表初始化在表工作列表中,重復(fù)如下步驟,直至所述表工作列表為空后,將確定的所述標(biāo)記的內(nèi)斂表內(nèi)斂至唯一的引用點(diǎn)之后,將所述標(biāo)記的內(nèi)斂表刪除得到進(jìn)一步過濾表后的SQL語句:每次從所述表工作列表中取出一個(gè)表并標(biāo)記所述表為內(nèi)斂表;獲取所述內(nèi)斂表的引用點(diǎn)及其所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合;若所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合中有至少一個(gè)引用表不存在所述內(nèi)斂表的引用點(diǎn)對(duì)應(yīng)的前一個(gè)SQL語句的輸入表集合中,則更新標(biāo)記所述內(nèi)斂表為不能被內(nèi)斂的表;若所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合中的所有引用表都存在所述內(nèi)斂表的引用點(diǎn)對(duì)應(yīng)的前一個(gè)SQL語句的輸出表集合中,則確定所述標(biāo)記的內(nèi)斂表。進(jìn)一步地,上述方法中,所述刪除所述初步過濾表后的SQL語句中的無用列,得到優(yōu)化后的SQL語句,包括:將所述初步過濾表后或進(jìn)一步過濾后的SQL語句對(duì)應(yīng)的創(chuàng)建的表的所有未被引用的列初始化在列工作列表中,重復(fù)如下步驟,直至所述列工作列表為空后,將標(biāo)記的所述無用列刪除,得到優(yōu)化后的SQL語句:每次從所述列工作列表中取出一個(gè)列并標(biāo)記所述列為無用列;將所述無用列所引用的所有引用列的引用次數(shù)均減1之后,若所述引用列的引用次數(shù)為零,則將所述引用次數(shù)為零時(shí)對(duì)應(yīng)的引用列添加至所述列工作列表中。根據(jù)本申請(qǐng)的另一方面,還提供了一種SQL優(yōu)化設(shè)備,該設(shè)備包括:分析提取裝置,用于對(duì)至少兩條SQL語句進(jìn)行分析并提取,得到SQL語句的基本信息、每一條所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系;過濾表裝置,用于基于所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表得到初步過濾表后的SQL語句;過濾列裝置,用于刪除所述初步過濾表后的SQL語句中的無用列,得到優(yōu)化后的SQL語句。進(jìn)一步地,上述設(shè)備中,所述分析提取裝置用于:獲取至少兩條SQL語句;通過詞法、語法和語義分析對(duì)每一條SQL語句進(jìn)行分析,得到包含有每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系的中間表示信息;對(duì)所述中間表示信息進(jìn)行提取,得到每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系。進(jìn)一步地,上述設(shè)備中,所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系包括:所述SQL語句對(duì)應(yīng)的表的基本信息;所述表的列的基本信息。進(jìn)一步地,上述設(shè)備中,所述過濾表裝置用于:基于表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,將無引用關(guān)系的臨時(shí)表和/或未預(yù)定義的全局表從所述SQL語句對(duì)應(yīng)的所述表中刪除,得到初步過濾表后的SQL語句。進(jìn)一步地,上述設(shè)備中,所述過濾表裝置還用于:基于數(shù)據(jù)流方程組對(duì)每一條SQL語句進(jìn)行數(shù)據(jù)流分析,得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表;檢測(cè)所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的可內(nèi)斂的表并將其內(nèi)斂至唯一引用點(diǎn),得到進(jìn)一步過濾表后的SQL語句。進(jìn)一步地,上述設(shè)備中,所述數(shù)據(jù)流方程組包括以下至少任一項(xiàng):前一個(gè)SQL語句的輸出表集合對(duì)應(yīng)的方程;當(dāng)前創(chuàng)建或修改的表集合對(duì)應(yīng)的方程;被修改前的表和當(dāng)前刪除的表的表集合對(duì)應(yīng)的方程;當(dāng)前輸出表集合對(duì)應(yīng)的方程。進(jìn)一步地,上述設(shè)備中,所述過濾表裝置用于:將所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的只有一個(gè)引用點(diǎn)的表初始化在表工作列表中,重復(fù)如下步驟,直至所述表工作列表為空后,將確定的所述標(biāo)記的內(nèi)斂表內(nèi)斂至唯一的引用點(diǎn)之后,將所述標(biāo)記的內(nèi)斂表刪除得到進(jìn)一步過濾表后的SQL語句:每次從所述表工作列表中取出一個(gè)表并標(biāo)記所述表為內(nèi)斂表;獲取所述內(nèi)斂表的引用點(diǎn)及其所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合;若所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合中有至少一個(gè)引用表不存在所述內(nèi)斂表的引用點(diǎn)對(duì)應(yīng)的前一個(gè)SQL語句的輸入表集合中,則更新標(biāo)記所述內(nèi)斂表為不能被內(nèi)斂的表;若所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合中的所有引用表都存在所述內(nèi)斂表的引用點(diǎn)對(duì)應(yīng)的前一個(gè)SQL語句的輸出表集合中,則確定所述標(biāo)記的內(nèi)斂表。進(jìn)一步地,上述設(shè)備中,所述過濾列裝置用于:將所述初步過濾表后或進(jìn)一步過濾后的SQL語句對(duì)應(yīng)的創(chuàng)建的表的所有未被引用的列初始化在列工作列表中,重復(fù)如下步驟,直至所述列工作列表為空后,將標(biāo)記的所述無用列刪除,得到優(yōu)化后的SQL語句:每次從所述列工作列表中取出一個(gè)列并標(biāo)記所述列為無用列;將所述無用列所引用的所有引用列的引用次數(shù)均減1之后,若所述引用列的引用次數(shù)為零,則將所述引用次數(shù)為零時(shí)對(duì)應(yīng)的引用列添加至所述列工作列表中。與現(xiàn)有技術(shù)相比,本申請(qǐng)首先獲取至少兩條SQL語句并對(duì)獲取的該至少兩條SQL語句進(jìn)行分析并提取,得到SQL語句的基本信息、每一條SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系;然后,基于該SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表,得到初步過濾表后的SQL語句;最后,刪除初步過濾表后的SQL語句中的表對(duì)應(yīng)的無用列,得到優(yōu)化后的SQL語句,實(shí)現(xiàn)了從至少兩條SQL語句及SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系的基礎(chǔ)上,來對(duì)多條SQL語句進(jìn)行預(yù)先優(yōu)化,不僅達(dá)到了對(duì)每一條SQL語句進(jìn)行優(yōu)化的目的,還提高了整體SQL優(yōu)化效果,進(jìn)而節(jié)省了現(xiàn)有技術(shù)中的預(yù)先計(jì)算的資源額外開銷。附圖說明通過閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:圖1示出根據(jù)本申請(qǐng)一個(gè)方面的一種SQL優(yōu)化方法的流程示意圖;圖2示出根據(jù)本申請(qǐng)一個(gè)方面的一種SQL優(yōu)化方法的整體流程示意圖;圖3示出根據(jù)本申請(qǐng)一個(gè)方面的一種SQL優(yōu)化設(shè)備的結(jié)構(gòu)示意圖。附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。具體實(shí)施方式下面結(jié)合附圖對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)描述。在本申請(qǐng)一個(gè)典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flashRAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號(hào)和載波。圖1示出本申請(qǐng)一個(gè)方面的一種SQL優(yōu)化方法的流程示意圖,該方法應(yīng)用于包含有至少兩條SQL語句的應(yīng)用設(shè)備端,具體包括:步驟S11、步驟S12和步驟S13,其中,首先所述步驟S11,對(duì)至少兩條SQL語句進(jìn)行分析并提取,得到SQL語句的基本信息、每一條所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系;然后所述步驟S12,基于所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表得到初步過濾表后的SQL語句;最后所述步驟S13,刪除所述初步過濾表后的SQL語句中的無用列,得到優(yōu)化后的SQL語句,實(shí)現(xiàn)了從至少兩條SQL語句及SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系的基礎(chǔ)上,來對(duì)多條SQL語句進(jìn)行預(yù)先優(yōu)化,不僅達(dá)到了對(duì)每一條SQL語句進(jìn)行優(yōu)化的目的,還提高了整體SQL優(yōu)化效果,進(jìn)而節(jié)省了現(xiàn)有技術(shù)中的預(yù)先計(jì)算的資源額外開銷。需要說明的是,所述SQL的基本信息可以包括SQL語句的編號(hào)、SQL語句類型、SQL語句對(duì)應(yīng)修改或者創(chuàng)建的表、SQL語句引用的表以及SQL語句引用的列;其中,所述SQL語句類型包括創(chuàng)建類型、修改類型及查詢類型等。當(dāng)前,其他現(xiàn)有或者今后可能出現(xiàn)的所述SQL的基本信息若能適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)內(nèi)。本申請(qǐng)一實(shí)施例中,為了對(duì)大型SQL應(yīng)用進(jìn)行分析、調(diào)試和維護(hù)的方便,現(xiàn)有技術(shù)中往往會(huì)引入很多臨時(shí)表用來保存處理的中間結(jié)果。在業(yè)務(wù)遷移過程中,因?yàn)槿藶橐蛩?例如,為了撰寫代碼方便,開發(fā)人員經(jīng)常會(huì)從一張表中選擇需要的列,但通常該表中只有部分列是有用的,或在程序修改過程中一些不必要的中間臨時(shí)表沒有及時(shí)刪除等)、SQL業(yè)務(wù)本身未優(yōu)化(例如為了調(diào)試而增加的臨時(shí)表會(huì)導(dǎo)致不必要的數(shù)據(jù)寫操作和/或讀操作等)以及由于缺乏全局所有SQL業(yè)務(wù)之間的全局信息而無法優(yōu)化,會(huì)導(dǎo)致大量SQL對(duì)應(yīng)的表的低效使用。為了保證被預(yù)先優(yōu)化后的表的高效使用,本申請(qǐng)?jiān)谒霾襟ES11中對(duì)至少兩條SQL語句進(jìn)行分析并提取,以得到SQL語句的基本信息、每一條SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,進(jìn)而能夠從全局SQL語句的基礎(chǔ)上對(duì)SQL語句進(jìn)行全局優(yōu)化。進(jìn)一步地,所述步驟S11對(duì)至少兩條SQL語句進(jìn)行分析并提取,得到SQL語句的基本信息、每一條所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,包括:獲取至少兩條SQL語句;通過詞法、語法和語義分析對(duì)每一條SQL語句進(jìn)行分析,得到包含有每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系的中間表示信息;對(duì)所述中間表示信息進(jìn)行提取,得到每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系。本申請(qǐng)一實(shí)施例中,步驟S11首先獲取反應(yīng)整個(gè)SQL應(yīng)用的至少兩條SQL語句,接著,通過詞法、語法和語義分析對(duì)每一條SQL語句進(jìn)行分析,得到方便應(yīng)用程序操作的一中間表示(InternalRepresentation)信息,其中,所述中間表示信息包含有SQL語句的原始信息,例如SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系等;由于所述中間表示信息對(duì)多個(gè)SQL之間的優(yōu)化并不友好,故需要進(jìn)一步地對(duì)所述中間表示信息進(jìn)行提取,以得到每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,用于后續(xù)對(duì)多個(gè)SQL語句之間進(jìn)行優(yōu)化,實(shí)現(xiàn)了對(duì)至少兩個(gè)SQL語句的分析和提取。進(jìn)一步地,所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系包括:所述SQL語句對(duì)應(yīng)的表的基本信息;所述表的列的基本信息。需要說明的是,所述SQL語句對(duì)應(yīng)表的基本信息可以包括:表的類型(全局表或者臨時(shí)表)、表對(duì)應(yīng)的所有列、表所在的數(shù)據(jù)庫(kù)名、表名及表的別名、被其他SQL語句進(jìn)行修改操作以及;被其他SQL語句引用(查詢操作)等。其中,所述表的類型包括預(yù)定義的全局表、未預(yù)定義的全局表及臨時(shí)表等,所述被其他SQL語句進(jìn)行的修改操作包括創(chuàng)建(create)操作、刪除(drop)操作以及更新(update)操作等,被其他SQL語句引用包括查詢操作。當(dāng)然,其他現(xiàn)有或者今后可能出現(xiàn)的所述SQL語句對(duì)應(yīng)表的基本信息若能適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)內(nèi)。需要說明的是,所述SQL語句對(duì)應(yīng)的所述表的列的基本信息可以包括:屬于哪個(gè)表、在表中的索引(index)、被哪個(gè)SQL語句引用、列的別名以及列的引用信息(例如e.g.udf(a,b,c)asid)等。當(dāng)然,其他現(xiàn)有或者今后可能出現(xiàn)的所述表的列的基本信息若能適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)內(nèi)。接著本申請(qǐng)的實(shí)施例,為了便于后續(xù)對(duì)SQL語句進(jìn)行優(yōu)化,在所述步驟S11得到所述SQL語句的基本信息、每一條所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系之后,將SQL語句對(duì)應(yīng)的表抽象為結(jié)構(gòu)(struct)類型的變量,同時(shí)將所述表的列抽象為結(jié)構(gòu)的域(fields),以便后續(xù)對(duì)多個(gè)SQL進(jìn)行優(yōu)化。當(dāng)然,所述結(jié)構(gòu)(struct)類型的變量?jī)H為本申請(qǐng)的實(shí)施例中的所述SQL語句對(duì)應(yīng)的表的一種表現(xiàn)形式,所述結(jié)構(gòu)的域(fields)僅為本申請(qǐng)的實(shí)施例中的所述表的列的一種表現(xiàn)形式,其他,其他現(xiàn)有或者今后可能出現(xiàn)的所述SQL語句對(duì)應(yīng)的表的表現(xiàn)形式和所述表的列的表現(xiàn)形式若能適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)內(nèi)。進(jìn)一步地,在所述步驟S11中通過詞法、語法和語義分析對(duì)獲取的至少兩條SQL語句進(jìn)行了分析和提取,得到所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系之后,所述步驟S12基于所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表得到初步過濾表后的SQL語句,包括:基于表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,將無引用關(guān)系的臨時(shí)表和/或未預(yù)定義的全局表從所述SQL語句對(duì)應(yīng)的所述表中刪除,得到初步過濾表后的SQL語句。本申請(qǐng)一實(shí)施例中,所述表的生命周期始于創(chuàng)建表(createtable)終于刪除表(droptable)。對(duì)于臨時(shí)表只要能夠找到createtable和droptable,便可確定該臨時(shí)表的生命周期,例如,若從createtableabc起,中間被多個(gè)SQL語句:SQL1、SQL2、……、Sn所引用,直至droptableabc的整個(gè)過程,則該整個(gè)過程用于表示該臨時(shí)表abc的生命周期。在優(yōu)化階段的臨時(shí)表abc的生命周期內(nèi),如果沒有SQL語句用到該臨時(shí)表abc,那么該臨時(shí)表abc就是死的,沒必要?jiǎng)?chuàng)建,即本申請(qǐng)的實(shí)施例在基于在表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系對(duì)SAL語句進(jìn)行優(yōu)化的過程中,createtableabc直至droptableabc的整個(gè)過程都沒有任何一個(gè)SQL語句引用到該臨時(shí)表abc,則說明我們的這個(gè)表abc是死的,則在SQL優(yōu)化的過程中將無引用關(guān)系的臨時(shí)表從所述SQL語句對(duì)應(yīng)的所述表中刪除得到初步過濾表后的SQL語句之后,在實(shí)際執(zhí)行SQL語句的過程中則不需要?jiǎng)?chuàng)建該臨時(shí)表abc以節(jié)約創(chuàng)建該臨時(shí)表abc的時(shí)間。接著本申請(qǐng)的上述實(shí)施例,對(duì)于全局表,在分析型應(yīng)用中,SQL語句是動(dòng)態(tài)輸入的,故無法分析所有的SQL語句,進(jìn)而不能直接判斷全局表是否有用。由于通常的應(yīng)用中有對(duì)外提供接口的接口表是固定的,故可以通過預(yù)定義的方式定義活的預(yù)定義全局表,而未預(yù)定義的全局表由于在SQL語句執(zhí)行結(jié)束后,不會(huì)被其他SQL語句、其他SQL語句對(duì)應(yīng)的表及其列用到當(dāng)前SQL語句執(zhí)行的結(jié)果信息,則未預(yù)定義的全局表的生命周期始于創(chuàng)建全局表止于分析當(dāng)前的SQL語句的結(jié)尾處,即在SQL語句對(duì)應(yīng)的結(jié)尾處加上droptable,以達(dá)到基于在表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句對(duì)應(yīng)的所述表中的未預(yù)定義的全局表的目的,得到初步過濾表后的SQL語句。接著本申請(qǐng)的上述實(shí)施例,若在至少兩條SQL語句的優(yōu)化階段,不僅存在無引用關(guān)系的臨時(shí)表,還存在未預(yù)定義的全局表,則會(huì)基于在表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,將無引用關(guān)系的臨時(shí)表和未預(yù)定義的全局表從所述SQL語句對(duì)應(yīng)的所述表中的刪除,以得到初步過濾表后的SQL語句,實(shí)現(xiàn)對(duì)SQL語句之間的初步過濾表的目的。進(jìn)一步地,所述步驟S12基于所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表得到初步過濾表后的SQL語句之后,還包括:基于數(shù)據(jù)流方程組對(duì)每一條SQL語句進(jìn)行數(shù)據(jù)流分析,得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表;檢測(cè)所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的可內(nèi)斂的表并將其內(nèi)斂至唯一引用點(diǎn),得到進(jìn)一步過濾表后的SQL語句。需要說明的是,所述數(shù)據(jù)流方程組包括以下至少任一項(xiàng):前一個(gè)SQL語句的輸出表集合對(duì)應(yīng)的方程;當(dāng)前創(chuàng)建或修改的表集合對(duì)應(yīng)的方程;被修改前的表和當(dāng)前刪除的表的表集合對(duì)應(yīng)的方程;當(dāng)前輸出表集合對(duì)應(yīng)的方程。例如,所述前一個(gè)SQL語句的輸出表集合對(duì)應(yīng)的方程為:IN(s)={前一個(gè)SQL語句對(duì)應(yīng)表的out},其中,s表示至少兩條SQL語句中的SQL語句s的編號(hào),基于該方程IN(s)對(duì)每一條SQL語句進(jìn)行分析得到前一個(gè)SQL語句的輸出表集合;所述當(dāng)前創(chuàng)建或修改的表集合對(duì)應(yīng)的方程為:GEN(s)={創(chuàng)建或修改的表},基于該方程GEN(s)對(duì)每一條SQL語句進(jìn)行分析得到當(dāng)前所述SQL對(duì)應(yīng)的當(dāng)前創(chuàng)建或修改的表集合;所述被修改前的表和當(dāng)前刪除的表的表集合對(duì)應(yīng)的方程為:KILL(s)={{被修改前的表}+{drop的表}},基于該方程KILL(s)對(duì)每一條SQL語句進(jìn)行分析得到當(dāng)前所述SQL對(duì)應(yīng)的被修改前的表和當(dāng)前刪除的表的表集合;所述當(dāng)前輸出表集合對(duì)應(yīng)的方程為:OUT(s)=IN(s)-KILL(s)+GEN(s),基于該方程OUT(s)對(duì)每一條SQL語句進(jìn)行分析得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表。本申請(qǐng)一實(shí)施例中,為了對(duì)SQL語句進(jìn)行優(yōu)化,所述步驟S12之后還需基于構(gòu)造的數(shù)據(jù)流方程組對(duì)每一條SQL語句進(jìn)行數(shù)據(jù)流分析,以得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表。例如,基于構(gòu)造的數(shù)據(jù)流方程組對(duì)SQL語句S1、S2以及S3進(jìn)行數(shù)據(jù)流分析,其中,第一個(gè)SQL語句S1的方程IN(s)包含所有用到的預(yù)定義的全局表,通過對(duì)每一條SQL語句基于數(shù)據(jù)流方程組分析一遍便可計(jì)算出數(shù)據(jù)流方程組對(duì)應(yīng)的集合,下面以預(yù)定義的接口表G和對(duì)SQL語句S1、S2以及S3分別做如下操作為例進(jìn)行說明。例如,SQL語句S1:CREATETABLEA...;SQL語句S2:CREATETABLEB...;SQL語句S3:UPDATETABLEA...;基于數(shù)據(jù)流方程組對(duì)上述SQL語句S1、S2以及S3進(jìn)行數(shù)據(jù)流分析如下:IN(S1)={G.v0},其中,G.v0表示前一個(gè)SQL語句的輸出表集合中的接口表G的當(dāng)前版本為v0;GEN(S1)={A.v0},用于指示當(dāng)前SQL語句S1創(chuàng)建的表為A,其版本號(hào)為v0;KILL(S1}={},用于指示當(dāng)前SQL語句S1被修改前的表和當(dāng)前刪除的表均為空;OUT(S1)={G.v0,A.v0},用于指示當(dāng)前SQL語句S1輸出表集合包括接口表G.v0和創(chuàng)建的表A.v0;IN(S2)={G.v0,A.v0},用于指示當(dāng)前SQL語句S2的輸入表集合為前一個(gè)SQL語句S1的輸出表集合OUT(S1);GEN(S2)={B.v0},用于指示當(dāng)前SQL語句S2創(chuàng)建的表為B,其版本號(hào)為v0;KILL(S2}={},用于指示當(dāng)前SQL語句S2被修改前的表和當(dāng)前刪除的表均為空;OUT(S2)={G.v0,A.v0,B.v0},用于指示當(dāng)前SQL語句S2的輸出表集合包括接口表G.v0、表A.v0和創(chuàng)建的表B.v0;IN(S3)={G.v0,A.v0,B.v0},用于指示當(dāng)前SQL語句S3的輸入表集合為前一個(gè)SQL語句S2的輸出表集合OUT(S2);GEN(S3)={A.v1},用于指示當(dāng)前SQL語句S3修改的表為A,其版本號(hào)為v1;KILL(S3}={A.v0},用于指示當(dāng)前SQL語句S3被修改前的表為A.v0;OUT(S3)={G.v0,A.v1,B.v0},用于指示當(dāng)前SQL語句S3的輸出表集合包括接口表G.v0、表A.v1和創(chuàng)建的表B.v0。接著本申請(qǐng)的上述實(shí)施例,在得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表之后,所述步驟S12接著檢測(cè)所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的可內(nèi)斂的表并將其內(nèi)斂至唯一引用點(diǎn),得到進(jìn)一步過濾表后的SQL語句,實(shí)現(xiàn)了將多條SQL語句中的可以內(nèi)斂的表進(jìn)行內(nèi)斂,以減少創(chuàng)建表時(shí)增加的IO(輸入輸出)負(fù)載,提高處理SQL語句的并發(fā)度。進(jìn)一步地,所述步驟S12中的檢測(cè)所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的可內(nèi)斂的表并將其內(nèi)斂至唯一引用點(diǎn),得到進(jìn)一步過濾表后的SQL語句,包括將所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的只有一個(gè)引用點(diǎn)的表初始化在表工作列表中,重復(fù)如下步驟,直至所述表工作列表為空后,將確定的所述標(biāo)記的內(nèi)斂表內(nèi)斂至唯一的引用點(diǎn)之后,將所述標(biāo)記的內(nèi)斂表刪除得到進(jìn)一步過濾表后的SQL語句:每次從所述表工作列表中取出一個(gè)表并標(biāo)記所述表為內(nèi)斂表;獲取所述內(nèi)斂表的引用點(diǎn)及其所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合;若所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合中有至少一個(gè)引用表不存在所述內(nèi)斂表的引用點(diǎn)對(duì)應(yīng)的前一個(gè)SQL語句的輸入表集合中,則更新標(biāo)記所述內(nèi)斂表為不能被內(nèi)斂的表;若所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合中的所有引用表都存在所述內(nèi)斂表的引用點(diǎn)對(duì)應(yīng)的前一個(gè)SQL語句的輸出表集合中,則確定所述標(biāo)記的內(nèi)斂表。本申請(qǐng)一實(shí)施例中,內(nèi)斂前的表對(duì)應(yīng)的SQL語句為以下兩條SQL與:createtemporarytableabcasselect*fromXYZ;select*fromabc;內(nèi)斂之后對(duì)應(yīng)的SQL語句為:select*from(select*fromXYZ),實(shí)現(xiàn)對(duì)表abc的內(nèi)斂。例如,創(chuàng)建SQL語句對(duì)應(yīng)的表會(huì)增加額外的IO負(fù)載,降低并發(fā)度。如果一個(gè)表只有一個(gè)引用點(diǎn),則沒必要?jiǎng)?chuàng)建這個(gè)表,但該表在引用點(diǎn)不一定能夠inline(內(nèi)斂)SQL。檢測(cè)只有一個(gè)引用點(diǎn)的表是否可以inline(內(nèi)斂)需要利用上述數(shù)據(jù)流方程組對(duì)應(yīng)的集合。檢測(cè)SQL中的可以內(nèi)斂的表方法如下:初始化:找到所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的只有一個(gè)引用點(diǎn)的表,并將該所有表初始化在一個(gè)表工作列表(Tworklist)中;對(duì)上述表工作列表(Tworklist)依次進(jìn)行表的取出并檢測(cè),直至所述表工作列表為空后,將表集合{sclist}中的任意一個(gè)表rb都存在所述內(nèi)斂表tab的引用點(diǎn)sr對(duì)應(yīng)的前一個(gè)SQL語句的輸入表集合IN(sr)中,則確定內(nèi)斂表tab為標(biāo)記的內(nèi)斂表tab,然后將確定的所述標(biāo)記的內(nèi)斂表內(nèi)斂至唯一的引用點(diǎn)之后,將所述標(biāo)記的內(nèi)斂表刪除得到進(jìn)一步過濾表后的SQL語句,實(shí)現(xiàn)對(duì)SQL語句中的可內(nèi)斂的表的優(yōu)化。例如:對(duì)SQL語句S4、S5、S6和S7做如下分析:S4:a=1;S5:x=a+b;//將表x標(biāo)記為內(nèi)斂表,當(dāng)前SQL語句S5對(duì)應(yīng)的創(chuàng)建時(shí)引用的表集合{sclist}為{av1,b},其中av1表示表a的當(dāng)前版本為v1S6:a=4;//此時(shí)a被修改,則OUT(S3)={av2,b},其中av2表示表a被修改后的當(dāng)前版本為v2S7:y=x+1;//當(dāng)前SQL語句S7的輸入表集合為前一個(gè)SQL語句S6的輸出表集合,即IN(S6)=IN(y)={av2,b}由于所述內(nèi)斂表x創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合{sclist}={av1,b}中有一個(gè)引用表av1不存在所述內(nèi)斂表x的引用點(diǎn)y對(duì)應(yīng)的前一個(gè)SQL語句的輸入表集合IN(y)={av2,b}中,則更新標(biāo)記所述內(nèi)斂表x為不能被內(nèi)斂的表。本申請(qǐng)一實(shí)施例中,由于無用列是指沒有任何代碼使用的列,況且無用列會(huì)增加創(chuàng)建表的時(shí)間,增加磁盤IO(輸入輸出)和網(wǎng)絡(luò)的負(fù)擔(dān),嚴(yán)重影響SQL語句的執(zhí)行效率。現(xiàn)有技術(shù)中只對(duì)單條SQL語句進(jìn)行優(yōu)化,無法優(yōu)化識(shí)別出無用列,故在本申請(qǐng)實(shí)施例中通過對(duì)至少兩條SQL語句分析檢測(cè)出這些無用列,以得到優(yōu)化后的SQL語句,具體如所述步驟S13刪除初步過濾表后的所述SQL語句中的無用列,得到優(yōu)化后的SQL語句,包括:將所述初步過濾表后或進(jìn)一步過濾后的SQL語句對(duì)應(yīng)的創(chuàng)建的表的所有未被引用的列初始化在列工作列表中,重復(fù)如下步驟,直至所述列工作列表為空后,將標(biāo)記的所述無用列刪除,得到優(yōu)化后的SQL語句:每次從所述列工作列表中取出一個(gè)列并標(biāo)記所述列為無用列;將所述無用列所引用的所有引用列的引用次數(shù)均減1之后,若所述引用列的引用次數(shù)為零,則將所述引用次數(shù)為零時(shí)對(duì)應(yīng)的引用列添加至所述列工作列表中。本申請(qǐng)一實(shí)施例中,所述步驟S13中查找至少兩條SQL語句中的無用列是個(gè)遞歸的過程,具體過程如下:初始化:查找所述初步過濾表后或進(jìn)一步過濾后的SQL語句對(duì)應(yīng)的創(chuàng)建的表(createtable)中的所有未被引用的列初始化到列工作列表(Cworklist)中對(duì)上述列工作列表(Cworklist)依次進(jìn)行無用列的取出并檢測(cè),直至所述列工作列表為空后,將標(biāo)記的所述無用列刪除,得到優(yōu)化后的SQL語句,實(shí)現(xiàn)了對(duì)SQL語句中當(dāng)前可用的表的列的優(yōu)化。例如,列q=a+b;//將列q標(biāo)記為無用列,其中無用列q所引用的所有引用列為a和b當(dāng)列x沒有被任何代碼使用時(shí),則將無用列q所引用的所有引用列a和b的引用次數(shù)均減1;若無用列q所引用的所有引用列中的列(a和/或b)的引用次數(shù)為0,則將a和/或b添加至列工作列表中,并重復(fù)執(zhí)行從列工作列表中取出一個(gè)列進(jìn)行上述操作,直至列工作列表為空之后,將無用列刪除,得到優(yōu)化后的SQL語句,實(shí)現(xiàn)了對(duì)至少兩條SQL語句的優(yōu)化,進(jìn)而提高了整體SQL優(yōu)化效果,同時(shí)還節(jié)省了現(xiàn)有技術(shù)中的預(yù)先計(jì)算和創(chuàng)建無用列的資源的額外開銷。需要說明的是,本申請(qǐng)的實(shí)施例中不僅能夠?qū)λ鲋辽賰蓷lSQL語句做刪除無引用的臨時(shí)表和/或未預(yù)定義的臨時(shí)表、將可以內(nèi)斂的表內(nèi)斂至唯一引用點(diǎn)并刪除內(nèi)斂表以及刪除無用列的優(yōu)化,還可以實(shí)現(xiàn)對(duì)所述至少兩條SQL語句進(jìn)行的公共子查詢刪除(CSE)及SQL執(zhí)行并行化等優(yōu)化。在本申請(qǐng)一實(shí)施例中,圖2示出本申請(qǐng)的一個(gè)方面的一種SQL優(yōu)化方法的整體流程示意圖,該方法包括步驟S21、步驟S22、步驟S23、步驟S24和步驟S25,其中,所述步驟S21,獲取原始的至少兩條SQL語句(SQLs);所述步驟S22,對(duì)獲取的至少兩條SQL語句(SQLs)進(jìn)行此法、語法和語義分析和提取,得到每一條SQL語句的基本信息、每一條所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系;所述步驟S23,基于所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,對(duì)至少兩條SQL語句(SQLs)進(jìn)行跨SQL的分析,刪除所述SQL語句中的無用表得到初步過濾表后的SQL語句;所述步驟S24,對(duì)初步過濾表或進(jìn)一步過濾后的SQL語句進(jìn)行跨SQL優(yōu)化,刪除所述初步過濾表后的SQL語句中的無用列,得到優(yōu)化后的SQL語句;所述步驟S25,輸出優(yōu)化后的至少兩條SQL語句(SQLs)。圖3示出本申請(qǐng)一個(gè)方面的一種SQL優(yōu)化設(shè)備的結(jié)構(gòu)示意圖,該設(shè)備應(yīng)用于包含有至少兩條SQL語句的應(yīng)用設(shè)備端,該設(shè)備1具體包括:分析提取裝置11、過濾表裝置12和過濾列裝置13,其中,首先所述分析提取裝置11,用于對(duì)至少兩條SQL語句進(jìn)行分析并提取,得到SQL語句的基本信息、每一條所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系;然后所述過濾表裝置12,用于基于所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表得到初步過濾表后的SQL語句;最后所述過濾列裝置13,用于刪除所述初步過濾表后的SQL語句中的無用列,得到優(yōu)化后的SQL語句,實(shí)現(xiàn)了從至少兩條SQL語句及SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系的基礎(chǔ)上,來對(duì)多條SQL語句進(jìn)行預(yù)先優(yōu)化,不僅達(dá)到了對(duì)每一條SQL語句進(jìn)行優(yōu)化的目的,還提高了整體SQL優(yōu)化效果,進(jìn)而節(jié)省了現(xiàn)有技術(shù)中的預(yù)先計(jì)算的資源額外開銷。需要說明的是,所述SQL的基本信息可以包括SQL語句的編號(hào)、SQL語句類型、SQL語句對(duì)應(yīng)修改或者創(chuàng)建的表、SQL語句引用的表以及SQL語句引用的列;其中,所述SQL語句類型包括創(chuàng)建類型、修改類型及查詢類型等。當(dāng)前,其他現(xiàn)有或者今后可能出現(xiàn)的所述SQL的基本信息若能適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)內(nèi)。本申請(qǐng)一實(shí)施例中,為了對(duì)大型SQL應(yīng)用進(jìn)行分析、調(diào)試和維護(hù)的方便,現(xiàn)有技術(shù)中往往會(huì)引入很多臨時(shí)表用來保存處理的中間結(jié)果。在業(yè)務(wù)遷移過程中,因?yàn)槿藶橐蛩?例如,為了撰寫代碼方便,開發(fā)人員經(jīng)常會(huì)從一張表中選擇需要的列,但通常該表中只有部分列是有用的,或在程序修改過程中一些不必要的中間臨時(shí)表沒有及時(shí)刪除等)、SQL業(yè)務(wù)本身未優(yōu)化(例如為了調(diào)試而增加的臨時(shí)表會(huì)導(dǎo)致不必要的數(shù)據(jù)寫操作和/或讀操作等)以及由于缺乏全局所有SQL業(yè)務(wù)之間的全局信息而無法優(yōu)化,會(huì)導(dǎo)致大量SQL對(duì)應(yīng)的表的低效使用。為了保證被預(yù)先優(yōu)化后的表的高效使用,本申請(qǐng)?jiān)谒龇治鎏崛⊙b置11中對(duì)至少兩條SQL語句進(jìn)行分析并提取,以得到SQL語句的基本信息、每一條SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,進(jìn)而能夠從全局SQL語句的基礎(chǔ)上對(duì)SQL語句進(jìn)行全局優(yōu)化。進(jìn)一步地,所述分析提取裝置11用于:獲取至少兩條SQL語句;通過詞法、語法和語義分析對(duì)每一條SQL語句進(jìn)行分析,得到包含有每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系的中間表示信息;對(duì)所述中間表示信息進(jìn)行提取,得到每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系。本申請(qǐng)一實(shí)施例中,分析提取裝置11首先獲取反應(yīng)整個(gè)SQL應(yīng)用的至少兩條SQL語句,接著,通過詞法、語法和語義分析對(duì)每一條SQL語句進(jìn)行分析,得到方便應(yīng)用程序操作的一中間表示(InternalRepresentation)信息,其中,所述中間表示信息包含有SQL語句的原始信息,例如SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系等;由于所述中間表示信息對(duì)多個(gè)SQL之間的優(yōu)化并不友好,故需要進(jìn)一步地對(duì)所述中間表示信息進(jìn)行提取,以得到每一條SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,用于后續(xù)對(duì)多個(gè)SQL語句之間進(jìn)行優(yōu)化,實(shí)現(xiàn)了對(duì)至少兩個(gè)SQL語句的分析和提取。進(jìn)一步地,所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系包括:所述SQL語句對(duì)應(yīng)的表的基本信息;所述表的列的基本信息。需要說明的是,所述SQL語句對(duì)應(yīng)表的基本信息可以包括:表的類型(全局表或者臨時(shí)表)、表對(duì)應(yīng)的所有列、表所在的數(shù)據(jù)庫(kù)名、表名及表的別名、被其他SQL語句進(jìn)行修改操作以及;被其他SQL語句引用(查詢操作)等。其中,所述表的類型包括預(yù)定義的全局表、未預(yù)定義的全局表及臨時(shí)表等,所述被其他SQL語句進(jìn)行的修改操作包括創(chuàng)建(create)操作、刪除(drop)操作以及更新(update)操作等,被其他SQL語句引用包括查詢操作。當(dāng)然,其他現(xiàn)有或者今后可能出現(xiàn)的所述SQL語句對(duì)應(yīng)表的基本信息若能適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)內(nèi)。需要說明的是,所述SQL語句對(duì)應(yīng)的所述表的列的基本信息可以包括:屬于哪個(gè)表、在表中的索引(index)、被哪個(gè)SQL語句引用、列的別名以及列的引用信息(例如e.g.udf(a,b,c)asid)等。當(dāng)然,其他現(xiàn)有或者今后可能出現(xiàn)的所述表的列的基本信息若能適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)內(nèi)。接著本申請(qǐng)的實(shí)施例,為了便于后續(xù)對(duì)SQL語句進(jìn)行優(yōu)化,在所述分析提取裝置11得到所述SQL語句的基本信息、每一條所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系之后,將SQL語句對(duì)應(yīng)的表抽象為結(jié)構(gòu)(struct)類型的變量,同時(shí)將所述表的列抽象為結(jié)構(gòu)的域(fields),以便后續(xù)對(duì)多個(gè)SQL進(jìn)行優(yōu)化。當(dāng)然,所述結(jié)構(gòu)(struct)類型的變量?jī)H為本申請(qǐng)的實(shí)施例中的所述SQL語句對(duì)應(yīng)的表的一種表現(xiàn)形式,所述結(jié)構(gòu)的域(fields)僅為本申請(qǐng)的實(shí)施例中的所述表的列的一種表現(xiàn)形式,其他,其他現(xiàn)有或者今后可能出現(xiàn)的所述SQL語句對(duì)應(yīng)的表的表現(xiàn)形式和所述表的列的表現(xiàn)形式若能適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)內(nèi)。進(jìn)一步地,所述分析提取裝置11用于通過詞法、語法和語義分析對(duì)獲取的至少兩條SQL語句進(jìn)行了分析和提取,得到所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系之后,所述過濾表裝置12用于:基于表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,將無引用關(guān)系的臨時(shí)表和/或未預(yù)定義的全局表從所述SQL語句對(duì)應(yīng)的所述表中刪除,得到初步過濾表后的SQL語句。本申請(qǐng)一實(shí)施例中,所述表的生命周期始于創(chuàng)建表(createtable)終于刪除表(droptable)。對(duì)于臨時(shí)表只要能夠找到createtable和droptable,便可確定該臨時(shí)表的生命周期,例如,若從createtableabc起,中間被多個(gè)SQL語句:SQL1、SQL2、……、Sn所引用,直至droptableabc的整個(gè)過程,則該整個(gè)過程用于表示該臨時(shí)表abc的生命周期。在優(yōu)化階段的臨時(shí)表abc的生命周期內(nèi),如果沒有SQL語句用到該臨時(shí)表abc,那么該臨時(shí)表abc就是死的,沒必要?jiǎng)?chuàng)建,即本申請(qǐng)的實(shí)施例在基于在表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系對(duì)SAL語句進(jìn)行優(yōu)化的過程中,createtableabc直至droptableabc的整個(gè)過程都沒有任何一個(gè)SQL語句引用到該臨時(shí)表abc,則說明我們的這個(gè)表abc是死的,則在SQL優(yōu)化的過程中將無引用關(guān)系的臨時(shí)表從所述SQL語句對(duì)應(yīng)的所述表中刪除得到初步過濾表后的SQL語句之后,在實(shí)際執(zhí)行SQL語句的過程中則不需要?jiǎng)?chuàng)建該臨時(shí)表abc以節(jié)約創(chuàng)建該臨時(shí)表abc的時(shí)間。接著本申請(qǐng)的上述實(shí)施例,對(duì)于全局表,在分析型應(yīng)用中,SQL語句是動(dòng)態(tài)輸入的,故無法分析所有的SQL語句,進(jìn)而不能直接判斷全局表是否有用。由于通常的應(yīng)用中有對(duì)外提供接口的接口表是固定的,故可以通過預(yù)定義的方式定義活的預(yù)定義全局表,而未預(yù)定義的全局表由于在SQL語句執(zhí)行結(jié)束后,不會(huì)被其他SQL語句、其他SQL語句對(duì)應(yīng)的表及其列用到當(dāng)前SQL語句執(zhí)行的結(jié)果信息,則未預(yù)定義的全局表的生命周期始于創(chuàng)建全局表止于分析當(dāng)前的SQL語句的結(jié)尾處,即在SQL語句對(duì)應(yīng)的結(jié)尾處加上droptable,以達(dá)到基于在表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句對(duì)應(yīng)的所述表中的未預(yù)定義的全局表的目的,得到初步過濾表后的SQL語句。接著本申請(qǐng)的上述實(shí)施例,若在至少兩條SQL語句的優(yōu)化階段,不僅存在無引用關(guān)系的臨時(shí)表,還存在未預(yù)定義的全局表,則會(huì)基于在表的生命周期和所述SQL語句的基本信息、所述SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,將無引用關(guān)系的臨時(shí)表和未預(yù)定義的全局表從所述SQL語句對(duì)應(yīng)的所述表中的刪除,以得到初步過濾表后的SQL語句,實(shí)現(xiàn)對(duì)SQL語句之間的初步過濾表的目的。進(jìn)一步地,所述過濾表裝置12還用于:基于數(shù)據(jù)流方程組對(duì)每一條SQL語句進(jìn)行數(shù)據(jù)流分析,得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表;檢測(cè)所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的可內(nèi)斂的表并將其內(nèi)斂至唯一引用點(diǎn),得到進(jìn)一步過濾表后的SQL語句。需要說明的是,所述數(shù)據(jù)流方程組包括以下至少任一項(xiàng):前一個(gè)SQL語句的輸出表集合對(duì)應(yīng)的方程;當(dāng)前創(chuàng)建或修改的表集合對(duì)應(yīng)的方程;被修改前的表和當(dāng)前刪除的表的表集合對(duì)應(yīng)的方程;當(dāng)前輸出表集合對(duì)應(yīng)的方程。例如,所述前一個(gè)SQL語句的輸出表集合對(duì)應(yīng)的方程為:IN(s)={前一個(gè)SQL語句對(duì)應(yīng)表的out},其中,s表示至少兩條SQL語句中的SQL語句s的編號(hào),基于該方程IN(s)對(duì)每一條SQL語句進(jìn)行分析得到前一個(gè)SQL語句的輸出表集合;所述當(dāng)前創(chuàng)建或修改的表集合對(duì)應(yīng)的方程為:GEN(s)={創(chuàng)建或修改的表},基于該方程GEN(s)對(duì)每一條SQL語句進(jìn)行分析得到當(dāng)前所述SQL對(duì)應(yīng)的當(dāng)前創(chuàng)建或修改的表集合;所述被修改前的表和當(dāng)前刪除的表的表集合對(duì)應(yīng)的方程為:KILL(s)={{被修改前的表}+{drop的表}},基于該方程KILL(s)對(duì)每一條SQL語句進(jìn)行分析得到當(dāng)前所述SQL對(duì)應(yīng)的被修改前的表和當(dāng)前刪除的表的表集合;所述當(dāng)前輸出表集合對(duì)應(yīng)的方程為:OUT(s)=IN(s)-KILL(s)+GEN(s),基于該方程OUT(s)對(duì)每一條SQL語句進(jìn)行分析得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表。本申請(qǐng)一實(shí)施例中,為了對(duì)SQL語句進(jìn)行優(yōu)化,所述過濾表裝置12之后還需基于構(gòu)造的數(shù)據(jù)流方程組對(duì)每一條SQL語句進(jìn)行數(shù)據(jù)流分析,以得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表。例如,基于構(gòu)造的數(shù)據(jù)流方程組對(duì)SQL語句S1、S2以及S3進(jìn)行數(shù)據(jù)流分析,其中,第一個(gè)SQL語句S1的方程IN(s)包含所有用到的預(yù)定義的全局表,通過對(duì)每一條SQL語句基于數(shù)據(jù)流方程組分析一遍便可計(jì)算出數(shù)據(jù)流方程組對(duì)應(yīng)的集合,下面以預(yù)定義的接口表G和對(duì)SQL語句S1、S2以及S3分別做如下操作為例進(jìn)行說明。例如,SQL語句S1:CREATETABLEA...;SQL語句S2:CREATETABLEB...;SQL語句S3:UPDATETABLEA...;基于數(shù)據(jù)流方程組對(duì)上述SQL語句S1、S2以及S3進(jìn)行數(shù)據(jù)流分析如下:IN(S1)={G.v0},其中,G.v0表示前一個(gè)SQL語句的輸出表集合中的接口表G的當(dāng)前版本為v0;GEN(S1)={A.v0},用于指示當(dāng)前SQL語句S1創(chuàng)建的表為A,其版本號(hào)為v0;KILL(S1}={},用于指示當(dāng)前SQL語句S1被修改前的表和當(dāng)前刪除的表均為空;OUT(S1)={G.v0,A.v0},用于指示當(dāng)前SQL語句S1輸出表集合包括接口表G.v0和創(chuàng)建的表A.v0;IN(S2)={G.v0,A.v0},用于指示當(dāng)前SQL語句S2的輸入表集合為前一個(gè)SQL語句S1的輸出表集合OUT(S1);GEN(S2)={B.v0},用于指示當(dāng)前SQL語句S2創(chuàng)建的表為B,其版本號(hào)為v0;KILL(S2}={},用于指示當(dāng)前SQL語句S2被修改前的表和當(dāng)前刪除的表均為空;OUT(S2)={G.v0,A.v0,B.v0},用于指示當(dāng)前SQL語句S2的輸出表集合包括接口表G.v0、表A.v0和創(chuàng)建的表B.v0;IN(S3)={G.v0,A.v0,B.v0},用于指示當(dāng)前SQL語句S3的輸入表集合為前一個(gè)SQL語句S2的輸出表集合OUT(S2);GEN(S3)={A.v1},用于指示當(dāng)前SQL語句S3修改的表為A,其版本號(hào)為v1;KILL(S3}={A.v0},用于指示當(dāng)前SQL語句S3被修改前的表為A.v0;OUT(S3)={G.v0,A.v1,B.v0},用于指示當(dāng)前SQL語句S3的輸出表集合包括接口表G.v0、表A.v1和創(chuàng)建的表B.v0。接著本申請(qǐng)的上述實(shí)施例,在得到每一條SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表之后,所述過濾表裝置12接著檢測(cè)所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的可內(nèi)斂的表并將其內(nèi)斂至唯一引用點(diǎn),得到進(jìn)一步過濾表后的SQL語句,實(shí)現(xiàn)了將多條SQL語句中的可以內(nèi)斂的表進(jìn)行內(nèi)斂,以減少創(chuàng)建表時(shí)增加的IO(輸入輸出)負(fù)載,提高處理SQL語句的并發(fā)度。進(jìn)一步地,所述過濾表裝置12用于:將所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的只有一個(gè)引用點(diǎn)的表初始化在表工作列表中,重復(fù)如下步驟,直至所述表工作列表為空后,將確定的所述標(biāo)記的內(nèi)斂表內(nèi)斂至唯一的引用點(diǎn)之后,將所述標(biāo)記的內(nèi)斂表刪除得到進(jìn)一步過濾表后的SQL語句:每次從所述表工作列表中取出一個(gè)表并標(biāo)記所述表為內(nèi)斂表;獲取所述內(nèi)斂表的引用點(diǎn)及其所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合;若所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合中有至少一個(gè)引用表不存在所述內(nèi)斂表的引用點(diǎn)對(duì)應(yīng)的前一個(gè)SQL語句的輸入表集合中,則更新標(biāo)記所述內(nèi)斂表為不能被內(nèi)斂的表;若所述內(nèi)斂表創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合中的所有引用表都存在所述內(nèi)斂表的引用點(diǎn)對(duì)應(yīng)的前一個(gè)SQL語句的輸出表集合中,則確定所述標(biāo)記的內(nèi)斂表。本申請(qǐng)一實(shí)施例中,內(nèi)斂前的表對(duì)應(yīng)的SQL語句為以下兩條SQL與:createtemporarytableabcasselect*fromXYZ;select*fromabc;內(nèi)斂之后對(duì)應(yīng)的SQL語句為:select*from(select*fromXYZ),實(shí)現(xiàn)對(duì)表abc的內(nèi)斂。例如,創(chuàng)建SQL語句對(duì)應(yīng)的表會(huì)增加額外的IO負(fù)載,降低并發(fā)度。如果一個(gè)表只有一個(gè)引用點(diǎn),則沒必要?jiǎng)?chuàng)建這個(gè)表,但該表在引用點(diǎn)不一定能夠inline(內(nèi)斂)SQL。檢測(cè)只有一個(gè)引用點(diǎn)的表是否可以inline(內(nèi)斂)需要利用上述數(shù)據(jù)流方程組對(duì)應(yīng)的集合。檢測(cè)SQL中的可以內(nèi)斂的表方法如下:初始化:找到所述SQL語句對(duì)應(yīng)的當(dāng)前可用的所有表中的只有一個(gè)引用點(diǎn)的表,并將該所有表初始化在一個(gè)表工作列表(Tworklist)中;對(duì)上述表工作列表(Tworklist)依次進(jìn)行表的取出并檢測(cè),直至所述表工作列表為空后,將表集合{sclist}中的任意一個(gè)表rb都存在所述內(nèi)斂表tab的引用點(diǎn)sr對(duì)應(yīng)的前一個(gè)SQL語句的輸入表集合IN(sr)中,則確定內(nèi)斂表tab為標(biāo)記的內(nèi)斂表tab,然后將確定的所述標(biāo)記的內(nèi)斂表內(nèi)斂至唯一的引用點(diǎn)之后,將所述標(biāo)記的內(nèi)斂表刪除得到進(jìn)一步過濾表后的SQL語句,實(shí)現(xiàn)對(duì)SQL語句中的可內(nèi)斂的表的優(yōu)化。例如:對(duì)SQL語句S4、S5、S6和S7做如下分析:S4:a=1;S5:x=a+b;//將表x標(biāo)記為內(nèi)斂表,當(dāng)前SQL語句S5對(duì)應(yīng)的創(chuàng)建時(shí)引用的表集合{sclist}為{av1,b},其中av1表示表a的當(dāng)前版本為v1S6:a=4;//此時(shí)a被修改,則OUT(S3)={av2,b},其中av2表示表a被修改后的當(dāng)前版本為v2S7:y=x+1;//當(dāng)前SQL語句S7的輸入表集合為前一個(gè)SQL語句S6的輸出表集合,即IN(S6)=IN(y)={av2,b}由于所述內(nèi)斂表x創(chuàng)建時(shí)對(duì)應(yīng)的引用表集合{sclist}={av1,b}中有一個(gè)引用表av1不存在所述內(nèi)斂表x的引用點(diǎn)y對(duì)應(yīng)的前一個(gè)SQL語句的輸入表集合IN(y)={av2,b}中,則更新標(biāo)記所述內(nèi)斂表x為不能被內(nèi)斂的表。本申請(qǐng)一實(shí)施例中,由于無用列是指沒有任何代碼使用的列,況且無用列會(huì)增加創(chuàng)建表的時(shí)間,增加磁盤IO(輸入輸出)和網(wǎng)絡(luò)的負(fù)擔(dān),嚴(yán)重影響SQL語句的執(zhí)行效率。現(xiàn)有技術(shù)中只對(duì)單條SQL語句進(jìn)行優(yōu)化,無法優(yōu)化識(shí)別出無用列,故在本申請(qǐng)實(shí)施例中通過對(duì)至少兩條SQL語句分析檢測(cè)出這些無用列,以得到優(yōu)化后的SQL語句,具體所述過濾列裝置13用于:將所述初步過濾表后或進(jìn)一步過濾后的SQL語句對(duì)應(yīng)的創(chuàng)建的表的所有未被引用的列初始化在列工作列表中,重復(fù)如下步驟,直至所述列工作列表為空后,將標(biāo)記的所述無用列刪除,得到優(yōu)化后的SQL語句:每次從所述列工作列表中取出一個(gè)列并標(biāo)記所述列為無用列;將所述無用列所引用的所有引用列的引用次數(shù)均減1之后,若所述引用列的引用次數(shù)為零,則將所述引用次數(shù)為零時(shí)對(duì)應(yīng)的引用列添加至所述列工作列表中。本申請(qǐng)一實(shí)施例中,所述過濾列裝置13中查找至少兩條SQL語句中的無用列是個(gè)遞歸的過程,具體過程如下:初始化:查找所述初步過濾表后或進(jìn)一步過濾后的SQL語句對(duì)應(yīng)的創(chuàng)建的表(createtable)中的所有未被引用的列初始化到列工作列表(Cworklist)中對(duì)上述列工作列表(Cworklist)依次進(jìn)行無用列的取出并檢測(cè),直至所述列工作列表為空后,將標(biāo)記的所述無用列刪除,得到優(yōu)化后的SQL語句,實(shí)現(xiàn)了對(duì)SQL語句中當(dāng)前可用的表的列的優(yōu)化。例如,列q=a+b;//將列q標(biāo)記為無用列,其中無用列q所引用的所有引用列為a和b當(dāng)列x沒有被任何代碼使用時(shí),則將無用列q所引用的所有引用列a和b的引用次數(shù)均減1;若無用列q所引用的所有引用列中的列(a和/或b)的引用次數(shù)為0,則將a和/或b添加至列工作列表中,并重復(fù)執(zhí)行從列工作列表中取出一個(gè)列進(jìn)行上述操作,直至列工作列表為空之后,將無用列刪除,得到優(yōu)化后的SQL語句,實(shí)現(xiàn)了對(duì)至少兩條SQL語句的優(yōu)化,進(jìn)而提高了整體SQL優(yōu)化效果,同時(shí)還節(jié)省了現(xiàn)有技術(shù)中的預(yù)先計(jì)算和創(chuàng)建無用列的資源的額外開銷。需要說明的是,本申請(qǐng)的實(shí)施例中不僅能夠?qū)λ鲋辽賰蓷lSQL語句做刪除無引用的臨時(shí)表和/或未預(yù)定義的臨時(shí)表、將可以內(nèi)斂的表內(nèi)斂至唯一引用點(diǎn)并刪除內(nèi)斂表以及刪除無用列的優(yōu)化,還可以實(shí)現(xiàn)對(duì)所述至少兩條SQL語句進(jìn)行的公共子查詢刪除(CSE)及SQL執(zhí)行并行化等優(yōu)化。綜上所述,本申請(qǐng)通過首先獲取至少兩條SQL語句并對(duì)獲取的該至少兩條SQL語句進(jìn)行分析并提取,得到SQL語句的基本信息、每一條SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系;然后,基于該SQL語句的基本信息、SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系,刪除所述SQL語句中的無用表,得到初步過濾表后的SQL語句;最后,刪除初步過濾表后的SQL語句中的表對(duì)應(yīng)的無用列,得到優(yōu)化后的SQL語句,實(shí)現(xiàn)了從至少兩條SQL語句及SQL語句對(duì)應(yīng)的表及其表的列的對(duì)應(yīng)關(guān)系的基礎(chǔ)上,來對(duì)多條SQL語句進(jìn)行預(yù)先優(yōu)化,不僅達(dá)到了對(duì)每一條SQL語句進(jìn)行優(yōu)化的目的,還提高了整體SQL優(yōu)化效果,進(jìn)而節(jié)省了現(xiàn)有技術(shù)中的預(yù)先計(jì)算的資源額外開銷。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本申請(qǐng)進(jìn)行各種改動(dòng)和變型而不脫離本申請(qǐng)的精神和范圍。這樣,倘若本申請(qǐng)的這些修改和變型屬于本申請(qǐng)權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請(qǐng)也意圖包含這些改動(dòng)和變型在內(nèi)。需要注意的是,本申請(qǐng)可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專用集成電路(ASIC)、通用目的計(jì)算機(jī)或任何其他類似硬件設(shè)備來實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本申請(qǐng)的軟件程序可以通過處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本申請(qǐng)的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲(chǔ)到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,RAM存儲(chǔ)器,磁或光驅(qū)動(dòng)器或軟磁盤及類似設(shè)備。另外,本申請(qǐng)的一些步驟或功能可采用硬件來實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個(gè)步驟或功能的電路。另外,本申請(qǐng)的一部分可被應(yīng)用為計(jì)算機(jī)程序產(chǎn)品,例如計(jì)算機(jī)程序指令,當(dāng)其被計(jì)算機(jī)執(zhí)行時(shí),通過該計(jì)算機(jī)的操作,可以調(diào)用或提供根據(jù)本申請(qǐng)的方法和/或技術(shù)方案。而調(diào)用本申請(qǐng)的方法的程序指令,可能被存儲(chǔ)在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過廣播或其他信號(hào)承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲(chǔ)在根據(jù)所述程序指令運(yùn)行的計(jì)算機(jī)設(shè)備的工作存儲(chǔ)器中。在此,根據(jù)本申請(qǐng)的一個(gè)實(shí)施例包括一個(gè)裝置,該裝置包括用于存儲(chǔ)計(jì)算機(jī)程序指令的存儲(chǔ)器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計(jì)算機(jī)程序指令被該處理器執(zhí)行時(shí),觸發(fā)該裝置運(yùn)行基于前述根據(jù)本申請(qǐng)的多個(gè)實(shí)施例的方法和/或技術(shù)方案。對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本申請(qǐng)不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本申請(qǐng)的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本申請(qǐng)。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本申請(qǐng)的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請(qǐng)內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過軟件或者硬件來實(shí)現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
主站蜘蛛池模板: 镇安县| 红原县| 日照市| 信阳市| 富裕县| 法库县| 漳州市| 华亭县| 漠河县| 津市市| 股票| 晴隆县| 普陀区| 炉霍县| 河间市| 怀集县| 正宁县| 治多县| 香河县| 油尖旺区| 保德县| 乐昌市| 华蓥市| 油尖旺区| 石河子市| 枣强县| 西吉县| 哈密市| 稻城县| 平和县| 侯马市| 丘北县| 华坪县| 临颍县| 溆浦县| 大悟县| 平舆县| 翼城县| 武义县| 富宁县| 铜陵市|