一種提高數據庫查詢效率的方法和系統的制作方法
【專利摘要】本發明涉及數據庫查詢【技術領域】,本發明公開了一種提高數據庫查詢效率的方法,其具體包括以下的步驟:步驟一、提取出查詢語句,將查詢語句采用條件集進行描述,條件集G={g1,g2,g3,…,gn},gi為條件項(i=1,2,3,…,n),每個gi由原子條件tij(j=1,2,3,…,m)組成;步驟二、遍歷G的全部條件項,將每個條件項下的原子條件與其他原子條件逐一進行比較,當某個條件項下兩個原子條件之間有邏輯上的相互包含關系時,則將范圍較大(即外延較小)的原子條件舍去,得到新的條件集,并采用新的條件集進行數據庫的查詢。通過優化每個條件項下的原子條件,將原子條件之間的邏輯關系進行優化,減少從數據庫中提取數據的操作,從而提高數據庫的查詢效率。
【專利說明】一種提高數據庫查詢效率的方法和系統
【技術領域】
[0001]本發明屬于數據庫查詢【技術領域】,尤其涉及一種提高數據庫查詢效率的方法和系統。
【背景技術】
[0002]目前主流數據庫中提高查詢效率的方法基本上都是基于某種具體的關系型數據庫RDBMS系統進行的,并且都在某種程度上運用了某種具體的關系型數據庫的特性進行處理。這種現狀導致對通用的關系型數據庫RDBMS系統缺乏統一和高效的查詢方法。在局部應用和小規模應用時,查詢效率低的問題還不突出,但一旦涉及到用戶分布式應用,甚至遷移和移植數據庫,原有的提高查詢效率的方法將完全失效。
[0003]目前在數據庫查詢效率提升方面,都是各個廠商或者某個特定的關系數據庫進行特定的查詢效率優化,常見的有索引優化,存儲空間的優化,數據頁的鏈接,特定的主鍵設計等等。但是需要特定數據庫提供不同的功能支持和函數接口,并且在這個層面不同的關系型數據庫提供的數據操作語言DML、數據定義語言DDL在語法和詞法上相差甚遠,根本無法達到統一和通用。
【發明內容】
[0004]本發明的目的是針對現有技術中沒有一種有效、通用的方法來提高數據庫查詢效率的技術問題,本發明公開了一種提高數據庫查詢效率的方法。本發明還公開了提高數據庫查詢效率方法的實現系統。
[0005]本發明的目的通過下述技術方案來實現:
一種提高數據庫查詢效率的方法,其具體包括以下的步驟:步驟一、提取出查詢語句,將查詢語句采用條件集進行描述,其中條件集G= {g 1,g2,g 3,…,g n},gi為條件項(i=l, 2, 3,…,n),每個gi由原子條件tij (j=l, 2, 3,…,m)組成;條件項為只含有原子條件tij和“與”運算符的邏輯表達式;原子條件為不含“與”且不含“或”運算符的邏輯表達式;步驟二、遍歷G的全部條件項,將每個條件項下的原子條件與其他原子條件逐一進行比較,當某個條件項下兩個原子條件之間有邏輯上的相互包含關系時,則將范圍較大外延較小的原子條件舍去,得到新的條件集,并采用新的條件集進行數據庫的查詢。
[0006]更進一步地,上述方法還包括:當其中一個條件項是一個原子條件時,將這個原子條件與其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G的另外的子集,從而形成新的條件集。
[0007]更進一步地,上述方法還包括:當其中一個條件項包括兩個或者兩個以上的原子條件時,依次取出每一個原子條件,將取出的原子條件與其他其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個取出的原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G另外的子集,從而形成新的條件集。[0008]本發明還公開了一種提高數據庫查詢效率方法的實現系統,其具體包括語查詢語句提取模塊和查詢語句優化模塊,所述查詢語句提取模塊用于提取出查詢語句,將查詢語句采用條件集進行描述,其中條件集G = { g 1,g2,g 3,...,g n}, gi為條件項(i=l, 2, 3,..., n),每個gi由原子條件tij (j=l, 2, 3,..., m)組成;條件項為只含有原子條件tij和“與”運算符的邏輯表達式;原子條件為不含“與”且不含“或”運算符的邏輯表達式;所述查詢語句優化模塊用于遍歷G的全部條件項,將每個條件項下的原子條件與其他原子條件逐一進行比較,當某個條件項下兩個原子條件之間有邏輯上的相互包含關系時,則將范圍較大外延較小的原子條件舍去,得到新的條件集,并采用新的條件集進行數據庫的查詢。
[0009]更進一步地,上述系統還還包括公共原子條件提取模塊,所述公共原子條件提取模塊用于當其中一個條件項是一個原子條件時,將這個原子條件與其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G的另外的子集,從而形成新的條件集。
[0010]更進一步地,上述公共原子條件提取模塊還用于當其中一個條件項包括兩個或者兩個以上的原子條件時,依次取出每一個原子條件,將取出的原子條件與其他其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個取出的原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G另外的子集,從而形成新的條件集。
[0011]通過采用以上技術方案,本發明具有以下有益效果:通過優化查詢條件,將條件項下的原子條件之間的邏輯關系進行優化,將條件項之間的邏輯關系進行優化,減少從數據庫中提取數據的操作,從而提高數據庫的查詢效率。
【專利附圖】
【附圖說明】
[0012]圖1為本發明的提高數據庫查詢效率的方法的流程圖。
【具體實施方式】
[0013]為了使本發明的目的、技術方案及優點更加清楚明白,以下結合說明書附圖及具體實施例,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。
[0014]如圖1所示的本發明的提高數據庫查詢效率的方法的流程圖。
[0015]其中查詢條件的文法定義如下:
條件集 G:<g>|<gi>or <gj> ;
條件項 g:〈til>and〈tik> ;
原子條件 t:til, ti2, ti3…tim。
[0016]其查詢語句的優化過程如下:
a.將各條件項g中的原子條件進行比較,若各條件項的原子條件中有相互包含關系,則將外延小的原子條件t舍去;初始量m=l (l<m<p, p為條件項數)。
[0017]b.若m=p,遍歷G的全部條件項,即得到優化結果。
[0018]c.若項gm是一個原子條件tml,則將tml與各條件項gi (i≠m)的tij比較,若存在gk,其中包含tkj與tml相同,則將這部分gk與gm構成G的一個子集G * ,剩余元素構成子集C 將G *的公共項提取出來,得到新的集合記作G * ± ;轉至(b),繼續處理G-k -k ;
d.若項gm為兩個或者兩個以上的原子條件tmj和tmk (k Φ j)的and運算,貝U取第一個原子條件tmj,做(c)的處理,若G * *為非空集合,轉至(b),繼續處理G * * ;若6 * *為空集合,取下一個原子條件,做(c)處理,直到G * *非空;重復上述的(b) - Cd),直到取遍G的全部條件項,所得新的G * *與提取的序列即為優化后的查詢條件。
[0019]本發明公開了一種提高數據庫查詢效率的方法,其具體包括以下的步驟:步驟一、提取出查詢語句,將查詢語句采用條件集進行描述,其中條件集G = { g 1,g2,g 3,...,g n}, gi為條件項(i=l, 2,3,..., η),每個gi由原子條件ti j (j=l, 2, 3, "'m)組成;條件項為只含有原子條件tij和“與”運算符的邏輯表達式;原子條件為不含“與”且不含“或”運算符的邏輯表達式;步驟二、遍歷G的全部條件項,將每個條件項下的原子條件與其他原子條件逐一進行比較,當某個條件項下兩個原子條件之間有邏輯上的相互包含關系時,則將范圍較大(即外延較小)的原子條件舍去,得到新的條件集,并采用新的條件集進行數據庫的查詢;比如其中一個條件項下的兩個原子條件分別為id>5、id>7,這兩個原子條件之間就有邏輯上的相互包含關系,id>7的必然id>5,而id>5相對于id>7的范圍更大,即外延相對較小,而每個條件項下兩個原子條件之間都是“與”運算,此時,可以直接將id>5這個范圍大、外延小的原子條件舍去,只剩下id>7的這一個原子條件。通過優化每個條件項下的原子條件,將原子條件之間的邏輯關系進行優化,減少從數據庫中提取數據的操作,從而提高數據庫的查詢效率。
[0020]更進一步地,上述方法還包括:當其中一個條件項是一個原子條件時,將這個原子條件與其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G的另外的子集,從而形成新的條件集。若條件項gm是一個原子條件tml,則:將tml與各個條件項gi(i古m)的tij進行比較,若存在gk,其中包含tkj, tkj與tml相同,則將這個相同部分構成G的一個子集,剩余元素構成G的另外的子集,從而形成新的條件集,并通過新的條件集進行數據庫查詢。通過上述方法將條件項與條件項之間的邏輯關系進行優化,避免重復處理不同條件項下的同一個原子條件,進一步提高了數據庫查詢的效率。
[0021]更進一步地,上述方法還包括:當其中一個條件項包括兩個或者兩個以上的原子條件時,依次取出每一個原子條件,將取出的原子條件與其他其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個取出的原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G另外的子集,從而形成新的條件集。若條件項gm為兩個或者兩個以上的原子條件tmj和tmk (k幸j)的and運算,則取第一個原子條件tmj,將tmj與各個條件項gi (i古m)的tij進行比較,若存在gk,其中包含tkj, tkj與tmj相同,則將這個相同部分構成G的一個子集,剩余元素構成G的另外一個子集。依次類推,直到完成所有條件項中原子條件的處理,得到新的條件集,并采用新的條件集進行查詢,從而提高數據庫的查詢效率。
[0022]本發明還公開了 一種提高數據庫查詢效率方法的實現系統,其具體包括語查詢語句提取模塊和查詢語句優化模塊,所述查詢語句提取模塊用于提取出查詢語句,將查詢語句采用條件集進行描述,其中條件集G = { g 1,g2,g 3,…,g n},gi為條件項(i=l, 2, 3,…,n),每個gi由原子條件tij (j=l, 2, 3, 組成;條件項為只含有原子條件tij和“與”運算符的邏輯表達式;原子條件為不含“與”且不含“或”運算符的邏輯表達式;所述查詢語句優化模塊用于遍歷G的全部條件項,將每個條件項下的原子條件與其他原子條件逐一進行比較,當某個條件項下兩個原子條件之間有邏輯上的相互包含關系時,則將范圍較大(即外延較小)的原子條件舍去,得到新的條件集,并采用新的條件集進行數據庫的查詢;比如其中一個條件項下的兩個原子條件分別為id>5、id>7,這兩個原子條件之間就有邏輯上的相互包含關系,id>7的必然id>5,而id>5相對于id>7的范圍更大,即外延相對較小,而每個條件項下兩個原子條件之間都是“與”運算,此時,可以直接將id>5這個范圍大、外延小的原子條件舍去,只剩下id>7的這一個原子條件。通過優化每個條件項下的原子條件,將原子條件之間的邏輯關系進行優化,減少從數據庫中提取數據的操作,從而提高數據庫的查詢效率。
[0023] 更進一步地,上述系統還還包括公共原子條件提取模塊,所述公共原子條件提取模塊用于當其中一個條件項是一個原子條件時,將這個原子條件與其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G的另外的子集,從而形成新的條件集。若條件項gm是一個原子條件tml,則:將tml與各個條件項gi (i古m)的tij進行比較,若存在gk,其中包含tkj,tkj與tml相同,則將這個相同部分構成G的一個子集,剩余元素構成G的另外的子集,從而形成新的條件集,并通過新的條件集進行數據庫查詢。通過上述方法將條件項與條件項之間的邏輯關系進行優化,避免重復處理不同條件項下的同一個原子條件,進一步提高了數據庫查詢的效率。
[0024]更進一步地,上述公共原子條件提取模塊還用于當其中一個條件項包括兩個或者兩個以上的原子條件時,依次取出每一個原子條件,將取出的原子條件與其他其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個取出的原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G另外的子集,從而形成新的條件集。若條件項gm為兩個或者兩個以上的原子條件tmj和tmk (k^ j)的and運算,貝1J取第一個原子條件tmj,將tmj與各個條件項gi(i幸m)的tij進行比較,若存在gk,其中包含tkj,tkj與tmj相同,則將這個相同部分構成G的一個子集,剩余元素構成G的另外一個子集。依次類推,直到完成所有條件項中原子條件的處理,得到新的條件集,并采用新的條件集進行查詢,從而提高數據庫的查詢效率。
[0025]上述的實施例中所給出的系數和參數,是提供給本領域的技術人員來實現或使用本發明的,本發明并不限定僅取前述公開的數值,在不脫離本發明的發明思想的情況下,本領域的技術人員可以對上述實施例做出種種修改或調整,因而本發明的保護范圍并不被上述實施例所限,而應該是符合權利要求書提到的創新性特征的最大范圍。
【權利要求】
1.一種提高數據庫查詢效率的方法,其具體包括以下的步驟:步驟一、提取出查詢語句,將查詢語句采用條件集進行描述,其中條件集G= { g 1,g2,g 3,…,g n}, gi為條件項(i=l,2,3,..., η),每個gi由原子條件tij (j=l, 2, 3,..., m)組成;條件項為只含有原子條件tij和“與”運算符的邏輯表達式;原子條件為不含“與”且不含“或”運算符的邏輯表達式;步驟二、遍歷G的全部條件項,將每個條件項下的原子條件與其他原子條件逐一進行比較,當某個條件項下兩個原子條件之間有邏輯上的相互包含關系時,則將范圍較大外延較小的原子條件舍去,得到新的條件集,并采用新的條件集進行數據庫的查詢。
2.如權利要求1所述的提高數據庫查詢效率的方法,其特征在于所述方法還包括:當其中一個條件項是一個原子條件時,將這個原子條件與其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G的另外的子集,從而形成新的條件集。
3.如權利要求1或者2所述的提高數據庫查詢效率的方法,其特征在于所述方法還包括:當其中一個條件項包括兩個或者兩個以上的原子條件時,依次取出每一個原子條件,將取出的原子條件與其他其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個取出的原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G另外的子集,從而形成新的條件集。
4.一種提高數據庫查詢效率方法的實現系統,其特征在于具體包括語查詢語句提取模塊和查詢語句優化模塊,所述查詢語句提取模塊用于提取出查詢語句,將查詢語句采用條件集進行描述,其中條件集G = { g l,g2, g 3,...,g n},gi為條件項(i=l, 2,3,…,η),每個gi由原子條件tij (j=l,2,3,…,m)組成;條件項為只含有原子條件tij和“與”運算符的邏輯表達式;原子條件為不含“與”且不含“或”運算符的邏輯表達式;所述查詢語句優化模塊用于遍歷G的全部條件項,將每個條件項下的原子條件與其他原子條件逐一進行比較,當某個條件項下兩個原子條件之間有邏輯上的相互包含關系時,則將范圍較大外延較小的原子條件舍去,得到新的條件集,并采用新`的條件集進行數據庫的查詢。
5.如權利要求4所述提高數據庫查詢效率方法的實現系統,其特征在于所述系統還還包括公共原子條件提取模塊,所述公共原子條件提取模塊用于當其中一個條件項是一個原子條件時,將這個原子條件與其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G的另外的子集,從而形成新的條件集。
6.如權利要求5所述提高數據庫查詢效率方法的實現系統,其特征在于所述公共原子條件提取模塊還用于當其中一個條件項包括兩個或者兩個以上的原子條件時,依次取出每一個原子條件,將取出的原子條件與其他其他條件項的原子條件進行比較,當其他條件項的某個原子條件與這個取出的原子條件相同時,將相同的原子條件構成條件集G的一個子集,其他的條件構成條件集G另外的子集,從而形成新的條件集。
【文檔編號】G06F17/30GK103646067SQ201310647102
【公開日】2014年3月19日 申請日期:2013年12月6日 優先權日:2013年12月6日
【發明者】蘭俊松, 王德鵬, 劉念林 申請人:四川九洲電器集團有限責任公司