[發明專利]去除SQL查詢語句恒條件的方法有效
| 申請號: | 200710100359.6 | 申請日: | 2007-06-08 |
| 公開(公告)號: | CN101075255A | 公開(公告)日: | 2007-11-21 |
| 發明(設計)人: | 郭毅 | 申請(專利權)人: | 北京神舟航天軟件技術有限公司 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 北京北新智誠知識產權代理有限公司 | 代理人: | 張衛華 |
| 地址: | 100036北京*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 去除 sql 查詢 語句 條件 方法 | ||
技術領域
本發明涉及一種改寫SQL查詢語句的方法,具體地說,是涉及一種利用鏈表來去除SQL查詢語句中存在的恒條件的方法。
背景技術
在日常應用中,數據庫經常需要處理大規模的數據,查詢是用戶經常使用的操作,一個復雜的查詢語句會使數據庫系統進行大量繁瑣的數據處理,如WHERE條件的復雜度能很大地影響數據庫的查詢速度。
目前,公知的數據庫查詢優化技術都不能在語義級別消去復雜的WHERE恒條件,這樣就導致了查詢執行器在掃描表的每一行時都需要用WHERE條件進行篩選,從而大大增加了數據處理開銷。若查詢優化器能從語義判斷上消去一些不必要的WHERE條件的話,執行器便會顯著減少運行時間,提高系統的整體性能,故如何去除SQL查詢語句中的恒條件是今后查詢優化的關鍵。
發明內容
本發明的目的是提供一種去除SQL查詢語句恒條件的方法,該方法根據查詢語句來創建鏈表、合并鏈表,可在語義級別上有效地消去SQL查詢語句的恒條件,顯著降低數據庫系統執行器的處理開銷。
為實現上述目的,本發明采用以下技術方案:
一種去除SQL查詢語句恒條件的方法,它包括以下步驟:
創建鏈表步驟:對SQL查詢語句的查詢樹中的CHECK約束子樹和WHERE條件子樹進行后序遍歷,這兩個子樹的葉節點是CHECK約束和WHERE條件中的表達式節點,其它的節點是AND或OR節點,遇到表達式節點,則生成一個列屬性鏈表;
合并鏈表步驟:在進行后序遍歷過程中,遇到AND或者OR節點則合并該節點的子樹的列屬性鏈表;
改寫查詢語句步驟:在合并鏈表的過程中,若發現節點是恒真或恒假條件,則將該節點改寫為TRUE或FALSE常量節點,若最后該子樹的根節點被改寫為TRUE,則去掉WHERE條件;若根節點被改寫為FALSE,則將該SQL查詢直接改寫為空查詢。
本發明的優點是:由于在語義級別上有效地消去了SQL查詢語句的恒條件,因而避免了無關緊要的查詢處理,顯著降低了數據庫系統執行器對恒真恒假查詢條件的處理開銷。
附圖說明
圖1是本發明方法流程簡圖;
圖2是CHECK約束和WHERE條件轉換后的樹結構示意圖;
圖3是結構體的構成示意圖;
圖4是列屬性鏈表和區間鏈表示意圖;
圖5是創建鏈表的流程圖;
圖6是合并列屬性鏈表的流程圖;
圖7是用AND邏輯合并區間鏈表的流程圖;
圖8是用OR邏輯合并區間鏈表的流程圖;
圖9是本發明的一個實施例示意圖;
圖10是優化查詢語句的一般流程。
具體實施方式
在OSCAR數據庫中,parser語法解析子模塊將字符串形式的SQL查詢語句轉換成一個parse?tree結構,然后analyze語義分析子模塊將parse?tree結構轉換成內部識別的Query查詢樹結構,SQL語句的不同部分轉換成了查詢樹的各個子樹,接下來Optimizer查詢優化模塊對Query結構進行優化,生成執行計劃Plan,提交給Executer執行器模塊執行得到查詢結果。本發明位于Optimizer模塊中基于規則的優化子模塊中。
本發明方法包括圖1所示的三個步驟:創建鏈表、合并鏈表和改寫查詢語句。
本發明首先將CHECK約束和WHERE條件都轉換成查詢樹的子樹,表達式的樹結構如圖2所示,葉節點是表達式節點,如“列=1”、“列IS?NOT?NULL”等等,其他的節點是AND或者OR節點。本發明對這兩個子樹進行后序遍歷,遇到表達式節點則生成一個列屬性鏈表,遇到AND或者OR節點則合并該節點的子樹的列屬性鏈表,在合并鏈表的過程中,若發現恒真或恒假條件,則將條件節點改寫為TRUE或FALSE常量節點。若最后該子樹的根節點被改寫為TRUE,則WHERE條件可以去掉;若根節點被改寫為FALSE,則該SQL查詢可以直接改寫為空查詢。
本發明對CHECK約束和WHERE條件的樹結構進行后序遍歷,遇到表達式節點就創建列屬性鏈表,遇到AND或OR節點就合并鏈表并改寫查詢語句,這個遞歸的過程一直持續到遍歷完樹中每個節點。因為在CHECK約束和WHERE條件的樹結構中,葉節點都是表達式節點,其他的節點都是AND或OR節點,因此采用后序遍歷能確保對于AND或OR連接的各個表達式,先分別生成它們的列屬性鏈表,再根據AND或OR語義合并成一個鏈表。
下面結合附圖對本發明方法作詳細說明。
一.創建鏈表步驟
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京神舟航天軟件技術有限公司,未經北京神舟航天軟件技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/200710100359.6/2.html,轉載請聲明來源鉆瓜專利網。





