一種SQL優化方法及設備與流程
2023-08-06 22:46:11 5
本申請涉及計算機領域,尤其涉及一種SQL優化方法及設備。
背景技術:
::隨著大數據時代的到來,資料庫應用越來越多,處理的數據量也越來越大,處理邏輯也越來越複雜,通常的應用已經不再是幾個簡單的SQL(StructuredQueryLanguage,結構化查詢語言)語句的操作,大型應用往往包含成千上萬個SQL操作,如何快速處理海量數據已經成為業界的一個難題。現有技術中的SQL優化技術主要聚焦在單個SQL語句的執行計劃的優化,例如joinreorder(加入排序)和predicatepushdown(謂詞下推)等;現有技術對單個SQL語句進行優化都是通過對SQL語句中的多個表之間的可能出現的連接關係或聚集關係進行預先定義,並預先計算定義好SQL語句下的各個表對應的操作結果,以待需要對有連接關係或聚集關係的表進行相應的操作時,可以快速地得到預先定義好的操作結果,進而達到提高SQL的性能的目的。但是預先計算無法覆蓋所有SQL語句,只對單個SQL語句進行優化,且預先計算是基於已過時的表進行的,當這些表被修改後,原來的預先定義好的操作結果就無法反應真實狀況,進而不能滿足對實時的表的需求,可能出現預先計算優化好的表用不到或失效,從而造成資源的浪費;又由於單個SQL語句沒有與其他SQL語句之間的上下文銜接信息,導致整體優化效果不佳。因此,現有技術中通過對單個SQL語句進行預先優化,導致預先優化的SQL語句對應的表用不到或優化失效,造成整體優化效果不佳且資源浪費。技術實現要素:本申請的一個目的是提供一種SQL優化方法及設備,解決現有技術中通過對單個SQL語句進行預先優化,導致預先優化的SQL語句對應的表用不到或優化失效的問題,同時解決整體優化效果不佳且資源浪費的問題。根據本申請的一個方面,提供了一種SQL優化方法,該方法包括:對至少兩條SQL語句進行分析並提取,得到SQL語句的基本信息、每一條所述SQL語句對應的表及其表的列的對應關係;基於所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表得到初步過濾表後的SQL語句;刪除所述初步過濾表後的SQL語句中的無用列,得到優化後的SQL語句。進一步地,上述方法中,所述對至少兩條SQL語句進行分析並提取,得到SQL語句的基本信息、每一條所述SQL語句對應的表及其表的列的對應關係,包括:獲取至少兩條SQL語句;通過詞法、語法和語義分析對每一條SQL語句進行分析,得到包含有每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係的中間表示信息;對所述中間表示信息進行提取,得到每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係。進一步地,上述方法中,所述SQL語句對應的表及其表的列的對應關係包括:所述SQL語句對應的表的基本信息;所述表的列的基本信息。進一步地,上述方法中,所述基於所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表得到初步過濾表後的SQL語句,包括:基於表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,將無引用關係的臨時表和/或未預定義的全局表從所述SQL語句對應的所述表中刪除,得到初步過濾表後的SQL語句。進一步地,上述方法中,所述基於所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表得到初步過濾表後的SQL語句之後,還包括:基於數據流方程組對每一條SQL語句進行數據流分析,得到每一條SQL語句對應的當前可用的所有表;檢測所述SQL語句對應的當前可用的所有表中的可內斂的表並將其內斂至唯一引用點,得到進一步過濾表後的SQL語句。進一步地,上述方法中,所述數據流方程組包括以下至少任一項:前一個SQL語句的輸出表集合對應的方程;當前創建或修改的表集合對應的方程;被修改前的表和當前刪除的表的表集合對應的方程;當前輸出表集合對應的方程。進一步地,上述方法中,所述檢測所述SQL語句對應的當前可用的所有表中的可內斂的表並將其內斂至唯一引用點,得到進一步過濾表後的SQL語句,包括將所述SQL語句對應的當前可用的所有表中的只有一個引用點的表初始化在表工作列表中,重複如下步驟,直至所述表工作列表為空後,將確定的所述標記的內斂表內斂至唯一的引用點之後,將所述標記的內斂表刪除得到進一步過濾表後的SQL語句:每次從所述表工作列表中取出一個表並標記所述表為內斂表;獲取所述內斂表的引用點及其所述內斂表創建時對應的引用表集合;若所述內斂表創建時對應的引用表集合中有至少一個引用表不存在所述內斂表的引用點對應的前一個SQL語句的輸入表集合中,則更新標記所述內斂表為不能被內斂的表;若所述內斂表創建時對應的引用表集合中的所有引用表都存在所述內斂表的引用點對應的前一個SQL語句的輸出表集合中,則確定所述標記的內斂表。進一步地,上述方法中,所述刪除所述初步過濾表後的SQL語句中的無用列,得到優化後的SQL語句,包括:將所述初步過濾表後或進一步過濾後的SQL語句對應的創建的表的所有未被引用的列初始化在列工作列表中,重複如下步驟,直至所述列工作列表為空後,將標記的所述無用列刪除,得到優化後的SQL語句:每次從所述列工作列表中取出一個列並標記所述列為無用列;將所述無用列所引用的所有引用列的引用次數均減1之後,若所述引用列的引用次數為零,則將所述引用次數為零時對應的引用列添加至所述列工作列表中。根據本申請的另一方面,還提供了一種SQL優化設備,該設備包括:分析提取裝置,用於對至少兩條SQL語句進行分析並提取,得到SQL語句的基本信息、每一條所述SQL語句對應的表及其表的列的對應關係;過濾表裝置,用於基於所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表得到初步過濾表後的SQL語句;過濾列裝置,用於刪除所述初步過濾表後的SQL語句中的無用列,得到優化後的SQL語句。進一步地,上述設備中,所述分析提取裝置用於:獲取至少兩條SQL語句;通過詞法、語法和語義分析對每一條SQL語句進行分析,得到包含有每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係的中間表示信息;對所述中間表示信息進行提取,得到每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係。進一步地,上述設備中,所述SQL語句對應的表及其表的列的對應關係包括:所述SQL語句對應的表的基本信息;所述表的列的基本信息。進一步地,上述設備中,所述過濾表裝置用於:基於表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,將無引用關係的臨時表和/或未預定義的全局表從所述SQL語句對應的所述表中刪除,得到初步過濾表後的SQL語句。進一步地,上述設備中,所述過濾表裝置還用於:基於數據流方程組對每一條SQL語句進行數據流分析,得到每一條SQL語句對應的當前可用的所有表;檢測所述SQL語句對應的當前可用的所有表中的可內斂的表並將其內斂至唯一引用點,得到進一步過濾表後的SQL語句。進一步地,上述設備中,所述數據流方程組包括以下至少任一項:前一個SQL語句的輸出表集合對應的方程;當前創建或修改的表集合對應的方程;被修改前的表和當前刪除的表的表集合對應的方程;當前輸出表集合對應的方程。進一步地,上述設備中,所述過濾表裝置用於:將所述SQL語句對應的當前可用的所有表中的只有一個引用點的表初始化在表工作列表中,重複如下步驟,直至所述表工作列表為空後,將確定的所述標記的內斂表內斂至唯一的引用點之後,將所述標記的內斂表刪除得到進一步過濾表後的SQL語句:每次從所述表工作列表中取出一個表並標記所述表為內斂表;獲取所述內斂表的引用點及其所述內斂表創建時對應的引用表集合;若所述內斂表創建時對應的引用表集合中有至少一個引用表不存在所述內斂表的引用點對應的前一個SQL語句的輸入表集合中,則更新標記所述內斂表為不能被內斂的表;若所述內斂表創建時對應的引用表集合中的所有引用表都存在所述內斂表的引用點對應的前一個SQL語句的輸出表集合中,則確定所述標記的內斂表。進一步地,上述設備中,所述過濾列裝置用於:將所述初步過濾表後或進一步過濾後的SQL語句對應的創建的表的所有未被引用的列初始化在列工作列表中,重複如下步驟,直至所述列工作列表為空後,將標記的所述無用列刪除,得到優化後的SQL語句:每次從所述列工作列表中取出一個列並標記所述列為無用列;將所述無用列所引用的所有引用列的引用次數均減1之後,若所述引用列的引用次數為零,則將所述引用次數為零時對應的引用列添加至所述列工作列表中。與現有技術相比,本申請首先獲取至少兩條SQL語句並對獲取的該至少兩條SQL語句進行分析並提取,得到SQL語句的基本信息、每一條SQL語句對應的表及其表的列的對應關係;然後,基於該SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表,得到初步過濾表後的SQL語句;最後,刪除初步過濾表後的SQL語句中的表對應的無用列,得到優化後的SQL語句,實現了從至少兩條SQL語句及SQL語句對應的表及其表的列的對應關係的基礎上,來對多條SQL語句進行預先優化,不僅達到了對每一條SQL語句進行優化的目的,還提高了整體SQL優化效果,進而節省了現有技術中的預先計算的資源額外開銷。附圖說明通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特徵、目的和優點將會變得更明顯:圖1示出根據本申請一個方面的一種SQL優化方法的流程示意圖;圖2示出根據本申請一個方面的一種SQL優化方法的整體流程示意圖;圖3示出根據本申請一個方面的一種SQL優化設備的結構示意圖。附圖中相同或相似的附圖標記代表相同或相似的部件。具體實施方式下面結合附圖對本申請作進一步詳細描述。在本申請一個典型的配置中,終端、服務網絡的設備和可信方均包括一個或多個處理器(CPU)、輸入/輸出接口、網絡接口和內存。內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或快閃記憶體(flashRAM)。內存是計算機可讀介質的示例。計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。計算機的存儲介質的例子包括,但不限於相變內存(PRAM)、靜態隨機存取存儲器(SRAM)、動態隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術、只讀光碟只讀存儲器(CD-ROM)、數字多功能光碟(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁碟存儲或其他磁性存儲設備或任何其他非傳輸介質,可用於存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括非暫存電腦可讀媒體(transitorymedia),如調製的數據信號和載波。圖1示出本申請一個方面的一種SQL優化方法的流程示意圖,該方法應用於包含有至少兩條SQL語句的應用設備端,具體包括:步驟S11、步驟S12和步驟S13,其中,首先所述步驟S11,對至少兩條SQL語句進行分析並提取,得到SQL語句的基本信息、每一條所述SQL語句對應的表及其表的列的對應關係;然後所述步驟S12,基於所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表得到初步過濾表後的SQL語句;最後所述步驟S13,刪除所述初步過濾表後的SQL語句中的無用列,得到優化後的SQL語句,實現了從至少兩條SQL語句及SQL語句對應的表及其表的列的對應關係的基礎上,來對多條SQL語句進行預先優化,不僅達到了對每一條SQL語句進行優化的目的,還提高了整體SQL優化效果,進而節省了現有技術中的預先計算的資源額外開銷。需要說明的是,所述SQL的基本信息可以包括SQL語句的編號、SQL語句類型、SQL語句對應修改或者創建的表、SQL語句引用的表以及SQL語句引用的列;其中,所述SQL語句類型包括創建類型、修改類型及查詢類型等。當前,其他現有或者今後可能出現的所述SQL的基本信息若能適用於本申請,也應包含在本申請內。本申請一實施例中,為了對大型SQL應用進行分析、調試和維護的方便,現有技術中往往會引入很多臨時表用來保存處理的中間結果。在業務遷移過程中,因為人為因素(例如,為了撰寫代碼方便,開發人員經常會從一張表中選擇需要的列,但通常該表中只有部分列是有用的,或在程序修改過程中一些不必要的中間臨時表沒有及時刪除等)、SQL業務本身未優化(例如為了調試而增加的臨時表會導致不必要的數據寫操作和/或讀操作等)以及由於缺乏全局所有SQL業務之間的全局信息而無法優化,會導致大量SQL對應的表的低效使用。為了保證被預先優化後的表的高效使用,本申請在所述步驟S11中對至少兩條SQL語句進行分析並提取,以得到SQL語句的基本信息、每一條SQL語句對應的表及其表的列的對應關係,進而能夠從全局SQL語句的基礎上對SQL語句進行全局優化。進一步地,所述步驟S11對至少兩條SQL語句進行分析並提取,得到SQL語句的基本信息、每一條所述SQL語句對應的表及其表的列的對應關係,包括:獲取至少兩條SQL語句;通過詞法、語法和語義分析對每一條SQL語句進行分析,得到包含有每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係的中間表示信息;對所述中間表示信息進行提取,得到每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係。本申請一實施例中,步驟S11首先獲取反應整個SQL應用的至少兩條SQL語句,接著,通過詞法、語法和語義分析對每一條SQL語句進行分析,得到方便應用程式操作的一中間表示(InternalRepresentation)信息,其中,所述中間表示信息包含有SQL語句的原始信息,例如SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係等;由於所述中間表示信息對多個SQL之間的優化並不友好,故需要進一步地對所述中間表示信息進行提取,以得到每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係,用於後續對多個SQL語句之間進行優化,實現了對至少兩個SQL語句的分析和提取。進一步地,所述SQL語句對應的表及其表的列的對應關係包括:所述SQL語句對應的表的基本信息;所述表的列的基本信息。需要說明的是,所述SQL語句對應表的基本信息可以包括:表的類型(全局表或者臨時表)、表對應的所有列、表所在的資料庫名、表名及表的別名、被其他SQL語句進行修改操作以及;被其他SQL語句引用(查詢操作)等。其中,所述表的類型包括預定義的全局表、未預定義的全局表及臨時表等,所述被其他SQL語句進行的修改操作包括創建(create)操作、刪除(drop)操作以及更新(update)操作等,被其他SQL語句引用包括查詢操作。當然,其他現有或者今後可能出現的所述SQL語句對應表的基本信息若能適用於本申請,也應包含在本申請內。需要說明的是,所述SQL語句對應的所述表的列的基本信息可以包括:屬於哪個表、在表中的索引(index)、被哪個SQL語句引用、列的別名以及列的引用信息(例如e.g.udf(a,b,c)asid)等。當然,其他現有或者今後可能出現的所述表的列的基本信息若能適用於本申請,也應包含在本申請內。接著本申請的實施例,為了便於後續對SQL語句進行優化,在所述步驟S11得到所述SQL語句的基本信息、每一條所述SQL語句對應的表及其表的列的對應關係之後,將SQL語句對應的表抽象為結構(struct)類型的變量,同時將所述表的列抽象為結構的域(fields),以便後續對多個SQL進行優化。當然,所述結構(struct)類型的變量僅為本申請的實施例中的所述SQL語句對應的表的一種表現形式,所述結構的域(fields)僅為本申請的實施例中的所述表的列的一種表現形式,其他,其他現有或者今後可能出現的所述SQL語句對應的表的表現形式和所述表的列的表現形式若能適用於本申請,也應包含在本申請內。進一步地,在所述步驟S11中通過詞法、語法和語義分析對獲取的至少兩條SQL語句進行了分析和提取,得到所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係之後,所述步驟S12基於所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表得到初步過濾表後的SQL語句,包括:基於表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,將無引用關係的臨時表和/或未預定義的全局表從所述SQL語句對應的所述表中刪除,得到初步過濾表後的SQL語句。本申請一實施例中,所述表的生命周期始於創建表(createtable)終於刪除表(droptable)。對於臨時表只要能夠找到createtable和droptable,便可確定該臨時表的生命周期,例如,若從createtableabc起,中間被多個SQL語句:SQL1、SQL2、……、Sn所引用,直至droptableabc的整個過程,則該整個過程用於表示該臨時表abc的生命周期。在優化階段的臨時表abc的生命周期內,如果沒有SQL語句用到該臨時表abc,那麼該臨時表abc就是死的,沒必要創建,即本申請的實施例在基於在表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係對SAL語句進行優化的過程中,createtableabc直至droptableabc的整個過程都沒有任何一個SQL語句引用到該臨時表abc,則說明我們的這個表abc是死的,則在SQL優化的過程中將無引用關係的臨時表從所述SQL語句對應的所述表中刪除得到初步過濾表後的SQL語句之後,在實際執行SQL語句的過程中則不需要創建該臨時表abc以節約創建該臨時表abc的時間。接著本申請的上述實施例,對於全局表,在分析型應用中,SQL語句是動態輸入的,故無法分析所有的SQL語句,進而不能直接判斷全局表是否有用。由於通常的應用中有對外提供接口的接口表是固定的,故可以通過預定義的方式定義活的預定義全局表,而未預定義的全局表由於在SQL語句執行結束後,不會被其他SQL語句、其他SQL語句對應的表及其列用到當前SQL語句執行的結果信息,則未預定義的全局表的生命周期始於創建全局表止於分析當前的SQL語句的結尾處,即在SQL語句對應的結尾處加上droptable,以達到基於在表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句對應的所述表中的未預定義的全局表的目的,得到初步過濾表後的SQL語句。接著本申請的上述實施例,若在至少兩條SQL語句的優化階段,不僅存在無引用關係的臨時表,還存在未預定義的全局表,則會基於在表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,將無引用關係的臨時表和未預定義的全局表從所述SQL語句對應的所述表中的刪除,以得到初步過濾表後的SQL語句,實現對SQL語句之間的初步過濾表的目的。進一步地,所述步驟S12基於所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表得到初步過濾表後的SQL語句之後,還包括:基於數據流方程組對每一條SQL語句進行數據流分析,得到每一條SQL語句對應的當前可用的所有表;檢測所述SQL語句對應的當前可用的所有表中的可內斂的表並將其內斂至唯一引用點,得到進一步過濾表後的SQL語句。需要說明的是,所述數據流方程組包括以下至少任一項:前一個SQL語句的輸出表集合對應的方程;當前創建或修改的表集合對應的方程;被修改前的表和當前刪除的表的表集合對應的方程;當前輸出表集合對應的方程。例如,所述前一個SQL語句的輸出表集合對應的方程為:IN(s)={前一個SQL語句對應表的out},其中,s表示至少兩條SQL語句中的SQL語句s的編號,基於該方程IN(s)對每一條SQL語句進行分析得到前一個SQL語句的輸出表集合;所述當前創建或修改的表集合對應的方程為:GEN(s)={創建或修改的表},基於該方程GEN(s)對每一條SQL語句進行分析得到當前所述SQL對應的當前創建或修改的表集合;所述被修改前的表和當前刪除的表的表集合對應的方程為:KILL(s)={{被修改前的表}+{drop的表}},基於該方程KILL(s)對每一條SQL語句進行分析得到當前所述SQL對應的被修改前的表和當前刪除的表的表集合;所述當前輸出表集合對應的方程為:OUT(s)=IN(s)-KILL(s)+GEN(s),基於該方程OUT(s)對每一條SQL語句進行分析得到每一條SQL語句對應的當前可用的所有表。本申請一實施例中,為了對SQL語句進行優化,所述步驟S12之後還需基於構造的數據流方程組對每一條SQL語句進行數據流分析,以得到每一條SQL語句對應的當前可用的所有表。例如,基於構造的數據流方程組對SQL語句S1、S2以及S3進行數據流分析,其中,第一個SQL語句S1的方程IN(s)包含所有用到的預定義的全局表,通過對每一條SQL語句基於數據流方程組分析一遍便可計算出數據流方程組對應的集合,下面以預定義的接口表G和對SQL語句S1、S2以及S3分別做如下操作為例進行說明。例如,SQL語句S1:CREATETABLEA...;SQL語句S2:CREATETABLEB...;SQL語句S3:UPDATETABLEA...;基於數據流方程組對上述SQL語句S1、S2以及S3進行數據流分析如下:IN(S1)={G.v0},其中,G.v0表示前一個SQL語句的輸出表集合中的接口表G的當前版本為v0;GEN(S1)={A.v0},用於指示當前SQL語句S1創建的表為A,其版本號為v0;KILL(S1}={},用於指示當前SQL語句S1被修改前的表和當前刪除的表均為空;OUT(S1)={G.v0,A.v0},用於指示當前SQL語句S1輸出表集合包括接口表G.v0和創建的表A.v0;IN(S2)={G.v0,A.v0},用於指示當前SQL語句S2的輸入表集合為前一個SQL語句S1的輸出表集合OUT(S1);GEN(S2)={B.v0},用於指示當前SQL語句S2創建的表為B,其版本號為v0;KILL(S2}={},用於指示當前SQL語句S2被修改前的表和當前刪除的表均為空;OUT(S2)={G.v0,A.v0,B.v0},用於指示當前SQL語句S2的輸出表集合包括接口表G.v0、表A.v0和創建的表B.v0;IN(S3)={G.v0,A.v0,B.v0},用於指示當前SQL語句S3的輸入表集合為前一個SQL語句S2的輸出表集合OUT(S2);GEN(S3)={A.v1},用於指示當前SQL語句S3修改的表為A,其版本號為v1;KILL(S3}={A.v0},用於指示當前SQL語句S3被修改前的表為A.v0;OUT(S3)={G.v0,A.v1,B.v0},用於指示當前SQL語句S3的輸出表集合包括接口表G.v0、表A.v1和創建的表B.v0。接著本申請的上述實施例,在得到每一條SQL語句對應的當前可用的所有表之後,所述步驟S12接著檢測所述SQL語句對應的當前可用的所有表中的可內斂的表並將其內斂至唯一引用點,得到進一步過濾表後的SQL語句,實現了將多條SQL語句中的可以內斂的表進行內斂,以減少創建表時增加的IO(輸入輸出)負載,提高處理SQL語句的並發度。進一步地,所述步驟S12中的檢測所述SQL語句對應的當前可用的所有表中的可內斂的表並將其內斂至唯一引用點,得到進一步過濾表後的SQL語句,包括將所述SQL語句對應的當前可用的所有表中的只有一個引用點的表初始化在表工作列表中,重複如下步驟,直至所述表工作列表為空後,將確定的所述標記的內斂表內斂至唯一的引用點之後,將所述標記的內斂表刪除得到進一步過濾表後的SQL語句:每次從所述表工作列表中取出一個表並標記所述表為內斂表;獲取所述內斂表的引用點及其所述內斂表創建時對應的引用表集合;若所述內斂表創建時對應的引用表集合中有至少一個引用表不存在所述內斂表的引用點對應的前一個SQL語句的輸入表集合中,則更新標記所述內斂表為不能被內斂的表;若所述內斂表創建時對應的引用表集合中的所有引用表都存在所述內斂表的引用點對應的前一個SQL語句的輸出表集合中,則確定所述標記的內斂表。本申請一實施例中,內斂前的表對應的SQL語句為以下兩條SQL與:createtemporarytableabcasselect*fromXYZ;select*fromabc;內斂之後對應的SQL語句為:select*from(select*fromXYZ),實現對表abc的內斂。例如,創建SQL語句對應的表會增加額外的IO負載,降低並發度。如果一個表只有一個引用點,則沒必要創建這個表,但該表在引用點不一定能夠inline(內斂)SQL。檢測只有一個引用點的表是否可以inline(內斂)需要利用上述數據流方程組對應的集合。檢測SQL中的可以內斂的表方法如下:初始化:找到所述SQL語句對應的當前可用的所有表中的只有一個引用點的表,並將該所有表初始化在一個表工作列表(Tworklist)中;對上述表工作列表(Tworklist)依次進行表的取出並檢測,直至所述表工作列表為空後,將表集合{sclist}中的任意一個表rb都存在所述內斂表tab的引用點sr對應的前一個SQL語句的輸入表集合IN(sr)中,則確定內斂表tab為標記的內斂表tab,然後將確定的所述標記的內斂表內斂至唯一的引用點之後,將所述標記的內斂表刪除得到進一步過濾表後的SQL語句,實現對SQL語句中的可內斂的表的優化。例如:對SQL語句S4、S5、S6和S7做如下分析:S4:a=1;S5:x=a+b;//將表x標記為內斂表,當前SQL語句S5對應的創建時引用的表集合{sclist}為{av1,b},其中av1表示表a的當前版本為v1S6:a=4;//此時a被修改,則OUT(S3)={av2,b},其中av2表示表a被修改後的當前版本為v2S7:y=x+1;//當前SQL語句S7的輸入表集合為前一個SQL語句S6的輸出表集合,即IN(S6)=IN(y)={av2,b}由於所述內斂表x創建時對應的引用表集合{sclist}={av1,b}中有一個引用表av1不存在所述內斂表x的引用點y對應的前一個SQL語句的輸入表集合IN(y)={av2,b}中,則更新標記所述內斂表x為不能被內斂的表。本申請一實施例中,由於無用列是指沒有任何代碼使用的列,況且無用列會增加創建表的時間,增加磁碟IO(輸入輸出)和網絡的負擔,嚴重影響SQL語句的執行效率。現有技術中只對單條SQL語句進行優化,無法優化識別出無用列,故在本申請實施例中通過對至少兩條SQL語句分析檢測出這些無用列,以得到優化後的SQL語句,具體如所述步驟S13刪除初步過濾表後的所述SQL語句中的無用列,得到優化後的SQL語句,包括:將所述初步過濾表後或進一步過濾後的SQL語句對應的創建的表的所有未被引用的列初始化在列工作列表中,重複如下步驟,直至所述列工作列表為空後,將標記的所述無用列刪除,得到優化後的SQL語句:每次從所述列工作列表中取出一個列並標記所述列為無用列;將所述無用列所引用的所有引用列的引用次數均減1之後,若所述引用列的引用次數為零,則將所述引用次數為零時對應的引用列添加至所述列工作列表中。本申請一實施例中,所述步驟S13中查找至少兩條SQL語句中的無用列是個遞歸的過程,具體過程如下:初始化:查找所述初步過濾表後或進一步過濾後的SQL語句對應的創建的表(createtable)中的所有未被引用的列初始化到列工作列表(Cworklist)中對上述列工作列表(Cworklist)依次進行無用列的取出並檢測,直至所述列工作列表為空後,將標記的所述無用列刪除,得到優化後的SQL語句,實現了對SQL語句中當前可用的表的列的優化。例如,列q=a+b;//將列q標記為無用列,其中無用列q所引用的所有引用列為a和b當列x沒有被任何代碼使用時,則將無用列q所引用的所有引用列a和b的引用次數均減1;若無用列q所引用的所有引用列中的列(a和/或b)的引用次數為0,則將a和/或b添加至列工作列表中,並重複執行從列工作列表中取出一個列進行上述操作,直至列工作列表為空之後,將無用列刪除,得到優化後的SQL語句,實現了對至少兩條SQL語句的優化,進而提高了整體SQL優化效果,同時還節省了現有技術中的預先計算和創建無用列的資源的額外開銷。需要說明的是,本申請的實施例中不僅能夠對所述至少兩條SQL語句做刪除無引用的臨時表和/或未預定義的臨時表、將可以內斂的表內斂至唯一引用點並刪除內斂表以及刪除無用列的優化,還可以實現對所述至少兩條SQL語句進行的公共子查詢刪除(CSE)及SQL執行並行化等優化。在本申請一實施例中,圖2示出本申請的一個方面的一種SQL優化方法的整體流程示意圖,該方法包括步驟S21、步驟S22、步驟S23、步驟S24和步驟S25,其中,所述步驟S21,獲取原始的至少兩條SQL語句(SQLs);所述步驟S22,對獲取的至少兩條SQL語句(SQLs)進行此法、語法和語義分析和提取,得到每一條SQL語句的基本信息、每一條所述SQL語句對應的表及其表的列的對應關係;所述步驟S23,基於所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,對至少兩條SQL語句(SQLs)進行跨SQL的分析,刪除所述SQL語句中的無用表得到初步過濾表後的SQL語句;所述步驟S24,對初步過濾表或進一步過濾後的SQL語句進行跨SQL優化,刪除所述初步過濾表後的SQL語句中的無用列,得到優化後的SQL語句;所述步驟S25,輸出優化後的至少兩條SQL語句(SQLs)。圖3示出本申請一個方面的一種SQL優化設備的結構示意圖,該設備應用於包含有至少兩條SQL語句的應用設備端,該設備1具體包括:分析提取裝置11、過濾表裝置12和過濾列裝置13,其中,首先所述分析提取裝置11,用於對至少兩條SQL語句進行分析並提取,得到SQL語句的基本信息、每一條所述SQL語句對應的表及其表的列的對應關係;然後所述過濾表裝置12,用於基於所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表得到初步過濾表後的SQL語句;最後所述過濾列裝置13,用於刪除所述初步過濾表後的SQL語句中的無用列,得到優化後的SQL語句,實現了從至少兩條SQL語句及SQL語句對應的表及其表的列的對應關係的基礎上,來對多條SQL語句進行預先優化,不僅達到了對每一條SQL語句進行優化的目的,還提高了整體SQL優化效果,進而節省了現有技術中的預先計算的資源額外開銷。需要說明的是,所述SQL的基本信息可以包括SQL語句的編號、SQL語句類型、SQL語句對應修改或者創建的表、SQL語句引用的表以及SQL語句引用的列;其中,所述SQL語句類型包括創建類型、修改類型及查詢類型等。當前,其他現有或者今後可能出現的所述SQL的基本信息若能適用於本申請,也應包含在本申請內。本申請一實施例中,為了對大型SQL應用進行分析、調試和維護的方便,現有技術中往往會引入很多臨時表用來保存處理的中間結果。在業務遷移過程中,因為人為因素(例如,為了撰寫代碼方便,開發人員經常會從一張表中選擇需要的列,但通常該表中只有部分列是有用的,或在程序修改過程中一些不必要的中間臨時表沒有及時刪除等)、SQL業務本身未優化(例如為了調試而增加的臨時表會導致不必要的數據寫操作和/或讀操作等)以及由於缺乏全局所有SQL業務之間的全局信息而無法優化,會導致大量SQL對應的表的低效使用。為了保證被預先優化後的表的高效使用,本申請在所述分析提取裝置11中對至少兩條SQL語句進行分析並提取,以得到SQL語句的基本信息、每一條SQL語句對應的表及其表的列的對應關係,進而能夠從全局SQL語句的基礎上對SQL語句進行全局優化。進一步地,所述分析提取裝置11用於:獲取至少兩條SQL語句;通過詞法、語法和語義分析對每一條SQL語句進行分析,得到包含有每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係的中間表示信息;對所述中間表示信息進行提取,得到每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係。本申請一實施例中,分析提取裝置11首先獲取反應整個SQL應用的至少兩條SQL語句,接著,通過詞法、語法和語義分析對每一條SQL語句進行分析,得到方便應用程式操作的一中間表示(InternalRepresentation)信息,其中,所述中間表示信息包含有SQL語句的原始信息,例如SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係等;由於所述中間表示信息對多個SQL之間的優化並不友好,故需要進一步地對所述中間表示信息進行提取,以得到每一條SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係,用於後續對多個SQL語句之間進行優化,實現了對至少兩個SQL語句的分析和提取。進一步地,所述SQL語句對應的表及其表的列的對應關係包括:所述SQL語句對應的表的基本信息;所述表的列的基本信息。需要說明的是,所述SQL語句對應表的基本信息可以包括:表的類型(全局表或者臨時表)、表對應的所有列、表所在的資料庫名、表名及表的別名、被其他SQL語句進行修改操作以及;被其他SQL語句引用(查詢操作)等。其中,所述表的類型包括預定義的全局表、未預定義的全局表及臨時表等,所述被其他SQL語句進行的修改操作包括創建(create)操作、刪除(drop)操作以及更新(update)操作等,被其他SQL語句引用包括查詢操作。當然,其他現有或者今後可能出現的所述SQL語句對應表的基本信息若能適用於本申請,也應包含在本申請內。需要說明的是,所述SQL語句對應的所述表的列的基本信息可以包括:屬於哪個表、在表中的索引(index)、被哪個SQL語句引用、列的別名以及列的引用信息(例如e.g.udf(a,b,c)asid)等。當然,其他現有或者今後可能出現的所述表的列的基本信息若能適用於本申請,也應包含在本申請內。接著本申請的實施例,為了便於後續對SQL語句進行優化,在所述分析提取裝置11得到所述SQL語句的基本信息、每一條所述SQL語句對應的表及其表的列的對應關係之後,將SQL語句對應的表抽象為結構(struct)類型的變量,同時將所述表的列抽象為結構的域(fields),以便後續對多個SQL進行優化。當然,所述結構(struct)類型的變量僅為本申請的實施例中的所述SQL語句對應的表的一種表現形式,所述結構的域(fields)僅為本申請的實施例中的所述表的列的一種表現形式,其他,其他現有或者今後可能出現的所述SQL語句對應的表的表現形式和所述表的列的表現形式若能適用於本申請,也應包含在本申請內。進一步地,所述分析提取裝置11用於通過詞法、語法和語義分析對獲取的至少兩條SQL語句進行了分析和提取,得到所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係之後,所述過濾表裝置12用於:基於表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,將無引用關係的臨時表和/或未預定義的全局表從所述SQL語句對應的所述表中刪除,得到初步過濾表後的SQL語句。本申請一實施例中,所述表的生命周期始於創建表(createtable)終於刪除表(droptable)。對於臨時表只要能夠找到createtable和droptable,便可確定該臨時表的生命周期,例如,若從createtableabc起,中間被多個SQL語句:SQL1、SQL2、……、Sn所引用,直至droptableabc的整個過程,則該整個過程用於表示該臨時表abc的生命周期。在優化階段的臨時表abc的生命周期內,如果沒有SQL語句用到該臨時表abc,那麼該臨時表abc就是死的,沒必要創建,即本申請的實施例在基於在表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係對SAL語句進行優化的過程中,createtableabc直至droptableabc的整個過程都沒有任何一個SQL語句引用到該臨時表abc,則說明我們的這個表abc是死的,則在SQL優化的過程中將無引用關係的臨時表從所述SQL語句對應的所述表中刪除得到初步過濾表後的SQL語句之後,在實際執行SQL語句的過程中則不需要創建該臨時表abc以節約創建該臨時表abc的時間。接著本申請的上述實施例,對於全局表,在分析型應用中,SQL語句是動態輸入的,故無法分析所有的SQL語句,進而不能直接判斷全局表是否有用。由於通常的應用中有對外提供接口的接口表是固定的,故可以通過預定義的方式定義活的預定義全局表,而未預定義的全局表由於在SQL語句執行結束後,不會被其他SQL語句、其他SQL語句對應的表及其列用到當前SQL語句執行的結果信息,則未預定義的全局表的生命周期始於創建全局表止於分析當前的SQL語句的結尾處,即在SQL語句對應的結尾處加上droptable,以達到基於在表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句對應的所述表中的未預定義的全局表的目的,得到初步過濾表後的SQL語句。接著本申請的上述實施例,若在至少兩條SQL語句的優化階段,不僅存在無引用關係的臨時表,還存在未預定義的全局表,則會基於在表的生命周期和所述SQL語句的基本信息、所述SQL語句對應的表及其表的列的對應關係,將無引用關係的臨時表和未預定義的全局表從所述SQL語句對應的所述表中的刪除,以得到初步過濾表後的SQL語句,實現對SQL語句之間的初步過濾表的目的。進一步地,所述過濾表裝置12還用於:基於數據流方程組對每一條SQL語句進行數據流分析,得到每一條SQL語句對應的當前可用的所有表;檢測所述SQL語句對應的當前可用的所有表中的可內斂的表並將其內斂至唯一引用點,得到進一步過濾表後的SQL語句。需要說明的是,所述數據流方程組包括以下至少任一項:前一個SQL語句的輸出表集合對應的方程;當前創建或修改的表集合對應的方程;被修改前的表和當前刪除的表的表集合對應的方程;當前輸出表集合對應的方程。例如,所述前一個SQL語句的輸出表集合對應的方程為:IN(s)={前一個SQL語句對應表的out},其中,s表示至少兩條SQL語句中的SQL語句s的編號,基於該方程IN(s)對每一條SQL語句進行分析得到前一個SQL語句的輸出表集合;所述當前創建或修改的表集合對應的方程為:GEN(s)={創建或修改的表},基於該方程GEN(s)對每一條SQL語句進行分析得到當前所述SQL對應的當前創建或修改的表集合;所述被修改前的表和當前刪除的表的表集合對應的方程為:KILL(s)={{被修改前的表}+{drop的表}},基於該方程KILL(s)對每一條SQL語句進行分析得到當前所述SQL對應的被修改前的表和當前刪除的表的表集合;所述當前輸出表集合對應的方程為:OUT(s)=IN(s)-KILL(s)+GEN(s),基於該方程OUT(s)對每一條SQL語句進行分析得到每一條SQL語句對應的當前可用的所有表。本申請一實施例中,為了對SQL語句進行優化,所述過濾表裝置12之後還需基於構造的數據流方程組對每一條SQL語句進行數據流分析,以得到每一條SQL語句對應的當前可用的所有表。例如,基於構造的數據流方程組對SQL語句S1、S2以及S3進行數據流分析,其中,第一個SQL語句S1的方程IN(s)包含所有用到的預定義的全局表,通過對每一條SQL語句基於數據流方程組分析一遍便可計算出數據流方程組對應的集合,下面以預定義的接口表G和對SQL語句S1、S2以及S3分別做如下操作為例進行說明。例如,SQL語句S1:CREATETABLEA...;SQL語句S2:CREATETABLEB...;SQL語句S3:UPDATETABLEA...;基於數據流方程組對上述SQL語句S1、S2以及S3進行數據流分析如下:IN(S1)={G.v0},其中,G.v0表示前一個SQL語句的輸出表集合中的接口表G的當前版本為v0;GEN(S1)={A.v0},用於指示當前SQL語句S1創建的表為A,其版本號為v0;KILL(S1}={},用於指示當前SQL語句S1被修改前的表和當前刪除的表均為空;OUT(S1)={G.v0,A.v0},用於指示當前SQL語句S1輸出表集合包括接口表G.v0和創建的表A.v0;IN(S2)={G.v0,A.v0},用於指示當前SQL語句S2的輸入表集合為前一個SQL語句S1的輸出表集合OUT(S1);GEN(S2)={B.v0},用於指示當前SQL語句S2創建的表為B,其版本號為v0;KILL(S2}={},用於指示當前SQL語句S2被修改前的表和當前刪除的表均為空;OUT(S2)={G.v0,A.v0,B.v0},用於指示當前SQL語句S2的輸出表集合包括接口表G.v0、表A.v0和創建的表B.v0;IN(S3)={G.v0,A.v0,B.v0},用於指示當前SQL語句S3的輸入表集合為前一個SQL語句S2的輸出表集合OUT(S2);GEN(S3)={A.v1},用於指示當前SQL語句S3修改的表為A,其版本號為v1;KILL(S3}={A.v0},用於指示當前SQL語句S3被修改前的表為A.v0;OUT(S3)={G.v0,A.v1,B.v0},用於指示當前SQL語句S3的輸出表集合包括接口表G.v0、表A.v1和創建的表B.v0。接著本申請的上述實施例,在得到每一條SQL語句對應的當前可用的所有表之後,所述過濾表裝置12接著檢測所述SQL語句對應的當前可用的所有表中的可內斂的表並將其內斂至唯一引用點,得到進一步過濾表後的SQL語句,實現了將多條SQL語句中的可以內斂的表進行內斂,以減少創建表時增加的IO(輸入輸出)負載,提高處理SQL語句的並發度。進一步地,所述過濾表裝置12用於:將所述SQL語句對應的當前可用的所有表中的只有一個引用點的表初始化在表工作列表中,重複如下步驟,直至所述表工作列表為空後,將確定的所述標記的內斂表內斂至唯一的引用點之後,將所述標記的內斂表刪除得到進一步過濾表後的SQL語句:每次從所述表工作列表中取出一個表並標記所述表為內斂表;獲取所述內斂表的引用點及其所述內斂表創建時對應的引用表集合;若所述內斂表創建時對應的引用表集合中有至少一個引用表不存在所述內斂表的引用點對應的前一個SQL語句的輸入表集合中,則更新標記所述內斂表為不能被內斂的表;若所述內斂表創建時對應的引用表集合中的所有引用表都存在所述內斂表的引用點對應的前一個SQL語句的輸出表集合中,則確定所述標記的內斂表。本申請一實施例中,內斂前的表對應的SQL語句為以下兩條SQL與:createtemporarytableabcasselect*fromXYZ;select*fromabc;內斂之後對應的SQL語句為:select*from(select*fromXYZ),實現對表abc的內斂。例如,創建SQL語句對應的表會增加額外的IO負載,降低並發度。如果一個表只有一個引用點,則沒必要創建這個表,但該表在引用點不一定能夠inline(內斂)SQL。檢測只有一個引用點的表是否可以inline(內斂)需要利用上述數據流方程組對應的集合。檢測SQL中的可以內斂的表方法如下:初始化:找到所述SQL語句對應的當前可用的所有表中的只有一個引用點的表,並將該所有表初始化在一個表工作列表(Tworklist)中;對上述表工作列表(Tworklist)依次進行表的取出並檢測,直至所述表工作列表為空後,將表集合{sclist}中的任意一個表rb都存在所述內斂表tab的引用點sr對應的前一個SQL語句的輸入表集合IN(sr)中,則確定內斂表tab為標記的內斂表tab,然後將確定的所述標記的內斂表內斂至唯一的引用點之後,將所述標記的內斂表刪除得到進一步過濾表後的SQL語句,實現對SQL語句中的可內斂的表的優化。例如:對SQL語句S4、S5、S6和S7做如下分析:S4:a=1;S5:x=a+b;//將表x標記為內斂表,當前SQL語句S5對應的創建時引用的表集合{sclist}為{av1,b},其中av1表示表a的當前版本為v1S6:a=4;//此時a被修改,則OUT(S3)={av2,b},其中av2表示表a被修改後的當前版本為v2S7:y=x+1;//當前SQL語句S7的輸入表集合為前一個SQL語句S6的輸出表集合,即IN(S6)=IN(y)={av2,b}由於所述內斂表x創建時對應的引用表集合{sclist}={av1,b}中有一個引用表av1不存在所述內斂表x的引用點y對應的前一個SQL語句的輸入表集合IN(y)={av2,b}中,則更新標記所述內斂表x為不能被內斂的表。本申請一實施例中,由於無用列是指沒有任何代碼使用的列,況且無用列會增加創建表的時間,增加磁碟IO(輸入輸出)和網絡的負擔,嚴重影響SQL語句的執行效率。現有技術中只對單條SQL語句進行優化,無法優化識別出無用列,故在本申請實施例中通過對至少兩條SQL語句分析檢測出這些無用列,以得到優化後的SQL語句,具體所述過濾列裝置13用於:將所述初步過濾表後或進一步過濾後的SQL語句對應的創建的表的所有未被引用的列初始化在列工作列表中,重複如下步驟,直至所述列工作列表為空後,將標記的所述無用列刪除,得到優化後的SQL語句:每次從所述列工作列表中取出一個列並標記所述列為無用列;將所述無用列所引用的所有引用列的引用次數均減1之後,若所述引用列的引用次數為零,則將所述引用次數為零時對應的引用列添加至所述列工作列表中。本申請一實施例中,所述過濾列裝置13中查找至少兩條SQL語句中的無用列是個遞歸的過程,具體過程如下:初始化:查找所述初步過濾表後或進一步過濾後的SQL語句對應的創建的表(createtable)中的所有未被引用的列初始化到列工作列表(Cworklist)中對上述列工作列表(Cworklist)依次進行無用列的取出並檢測,直至所述列工作列表為空後,將標記的所述無用列刪除,得到優化後的SQL語句,實現了對SQL語句中當前可用的表的列的優化。例如,列q=a+b;//將列q標記為無用列,其中無用列q所引用的所有引用列為a和b當列x沒有被任何代碼使用時,則將無用列q所引用的所有引用列a和b的引用次數均減1;若無用列q所引用的所有引用列中的列(a和/或b)的引用次數為0,則將a和/或b添加至列工作列表中,並重複執行從列工作列表中取出一個列進行上述操作,直至列工作列表為空之後,將無用列刪除,得到優化後的SQL語句,實現了對至少兩條SQL語句的優化,進而提高了整體SQL優化效果,同時還節省了現有技術中的預先計算和創建無用列的資源的額外開銷。需要說明的是,本申請的實施例中不僅能夠對所述至少兩條SQL語句做刪除無引用的臨時表和/或未預定義的臨時表、將可以內斂的表內斂至唯一引用點並刪除內斂表以及刪除無用列的優化,還可以實現對所述至少兩條SQL語句進行的公共子查詢刪除(CSE)及SQL執行並行化等優化。綜上所述,本申請通過首先獲取至少兩條SQL語句並對獲取的該至少兩條SQL語句進行分析並提取,得到SQL語句的基本信息、每一條SQL語句對應的表及其表的列的對應關係;然後,基於該SQL語句的基本信息、SQL語句對應的表及其表的列的對應關係,刪除所述SQL語句中的無用表,得到初步過濾表後的SQL語句;最後,刪除初步過濾表後的SQL語句中的表對應的無用列,得到優化後的SQL語句,實現了從至少兩條SQL語句及SQL語句對應的表及其表的列的對應關係的基礎上,來對多條SQL語句進行預先優化,不僅達到了對每一條SQL語句進行優化的目的,還提高了整體SQL優化效果,進而節省了現有技術中的預先計算的資源額外開銷。顯然,本領域的技術人員可以對本申請進行各種改動和變型而不脫離本申請的精神和範圍。這樣,倘若本申請的這些修改和變型屬於本申請權利要求及其等同技術的範圍之內,則本申請也意圖包含這些改動和變型在內。需要注意的是,本申請可在軟體和/或軟體與硬體的組合體中被實施,例如,可採用專用集成電路(ASIC)、通用目的計算機或任何其他類似硬體設備來實現。在一個實施例中,本申請的軟體程序可以通過處理器執行以實現上文所述步驟或功能。同樣地,本申請的軟體程序(包括相關的數據結構)可以被存儲到計算機可讀記錄介質中,例如,RAM存儲器,磁或光碟機動器或軟磁碟及類似設備。另外,本申請的一些步驟或功能可採用硬體來實現,例如,作為與處理器配合從而執行各個步驟或功能的電路。另外,本申請的一部分可被應用為電腦程式產品,例如電腦程式指令,當其被計算機執行時,通過該計算機的操作,可以調用或提供根據本申請的方法和/或技術方案。而調用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質中,和/或通過廣播或其他信號承載媒體中的數據流而被傳輸,和/或被存儲在根據所述程序指令運行的計算機設備的工作存儲器中。在此,根據本申請的一個實施例包括一個裝置,該裝置包括用於存儲電腦程式指令的存儲器和用於執行程序指令的處理器,其中,當該電腦程式指令被該處理器執行時,觸發該裝置運行基於前述根據本申請的多個實施例的方法和/或技術方案。對於本領域技術人員而言,顯然本申請不限於上述示範性實施例的細節,而且在不背離本申請的精神或基本特徵的情況下,能夠以其他的具體形式實現本申請。因此,無論從哪一點來看,均應將實施例看作是示範性的,而且是非限制性的,本申請的範圍由所附權利要求而不是上述說明限定,因此旨在將落在權利要求的等同要件的含義和範圍內的所有變化涵括在本申請內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。此外,顯然「包括」一詞不排除其他單元或步驟,單數不排除複數。裝置權利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟體或者硬體來實現。第一,第二等詞語用來表示名稱,而並不表示任何特定的順序。當前第1頁1 2 3 當前第1頁1 2 3