[發明專利]用于非索引覆蓋的數據查詢方法和裝置有效
| 申請號: | 201410086556.7 | 申請日: | 2014-03-10 |
| 公開(公告)號: | CN103810300B | 公開(公告)日: | 2017-08-01 |
| 發明(設計)人: | 洪超 | 申請(專利權)人: | 北京國雙科技有限公司 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 北京康信知識產權代理有限責任公司11240 | 代理人: | 李志剛,吳貴明 |
| 地址: | 100086 北京市海淀區*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 用于 索引 覆蓋 數據 查詢 方法 裝置 | ||
技術領域
本發明涉及數據庫領域,具體而言,涉及一種用于非索引覆蓋的數據查詢方法和裝置。
背景技術
在數據庫表有聚集索引的情況下,當用數據庫表的非聚集索引列作為過濾條件,根據該列來從數據庫表中獲取數據列時,獲取的數據列在非聚集索引里通常都不是索引覆蓋(即非聚集索引缺少某些選擇的數據列),此時數據庫系統如SQLServer執行非聚集索引查找,并對于不包含的數據列執行書簽查找,或者執行聚集索引掃描。在數據量大時,無論是執行非聚集索引查找還是執行聚集索引掃描,都造成數據查詢性能降低。
例如,FactSession表在SessionTimeKey(時間列)上建立有聚集索引,在SessionKey上面建立有非聚集索引,非索引覆蓋的非聚集索引查詢代碼如下:
SELECT SessionKey,BrowserKey FROM dbo.FactSession WHERE SessionKey>7342
在上述舉例中可以看出,非聚集索引查詢是通過非聚集索引里的SessionKey進行過濾查詢,但在選擇列里面除了SessionKey還包含了BrowserKey,這個BrowserKey便導致了這條查詢不是非聚集索引的索引覆蓋的情況,因此,變成整數據表的聚集索引掃描。
針對現有技術中在數據量大時造成對數據庫表的數據查詢性能降低的問題,目前尚未提出有效的解決方案。
發明內容
本發明的主要目的在于提供一種用于非索引覆蓋的數據查詢方法和裝置,以解決在數據量大時造成對數據庫表的數據查詢性能降低的問題。
為了實現上述目的,根據本發明的一個方面,提供了一種用于非索引覆蓋的數據查詢方法。根據本發明的用于非索引覆蓋的數據查詢方法包括:獲取數據庫表的非聚集索引的過濾條件;在確定通過非聚集索引對非索引覆蓋的數據庫表進行查詢時,獲取數據庫表的聚集索引的聚簇鍵的值;以及將過濾條件和聚簇鍵的值作為查詢條件在聚集索引里對數據庫表進行查詢。
進一步地,獲取聚集索引的聚簇鍵的值包括:從非聚集索引中查找滿足過濾條件的記錄行;以及獲取記錄行對應的聚簇鍵的值。
進一步地,在獲取記錄行對應的聚簇鍵的值之后,數據查詢方法還包括:對獲取的記錄行對應的聚簇鍵的值去重;以及將去重后的聚簇鍵的值插入到臨時表,將臨時表和過濾條件作為查詢條件。
進一步地,在確定通過非聚集索引對非索引覆蓋的數據表進行查詢之前,數據查詢方法還包括:提取數據庫表的所有非聚集索引;基于提取到的非聚集索引判斷非聚集索引是否包含所有數據列;以及如果判斷出非聚集索引不包含所有數據列,則確定非聚集索引里非索引覆蓋。
進一步地,在提取數據庫中的所有非聚集索引之后,數據查詢方法還包括:將提取到的非聚集索引存儲到緩存;以及當再次確定通過非聚集索引對非索引覆蓋的數據庫進行查詢時,獲取緩存中的非聚集索引。
為了實現上述目的,根據本發明的另一方面,提供了一種用于非索引覆蓋的數據查詢裝置。根據本發明的用于非索引覆蓋的數據查詢裝置包括:第一獲取單元,用于獲取數據庫表的非聚集索引的過濾條件;第二獲取單元,用于在確定通過非聚集索引對非索引覆蓋的數據庫表進行查詢時,獲取數據庫表的聚集索引的聚簇鍵的值;以及查詢單元,用于將過濾條件和聚簇鍵的值作為查詢條件在聚集索引里對數據庫表進行查詢。
進一步地,第二獲取單元包括:查找模塊,用于從非聚集索引中查找滿足過濾條件的記錄行;以及獲取模塊,用于獲取記錄行對應的聚簇鍵的值。
進一步地,數據查詢裝置還包括:去重單元,用于在獲取記錄行對應的聚簇鍵的值之后,對獲取的記錄行對應的聚簇鍵的值去重;以及插入單元,用于將去重后的聚簇鍵的值插入到臨時表,將臨時表和過濾條件作為查詢條件。
進一步地,數據查詢裝置還包括:提取單元,用于提取數據庫表的所有非聚集索引;判斷單元,用于基于提取到的非聚集索引判斷非聚集索引是否包含所有數據列;以及確定單元,用于當判斷出非聚集索引不包含所有數據列,確定非聚集索引里非索引覆蓋。
進一步地,數據查詢裝置還包括:存儲單元,用于在提取數據庫中的所有非聚集索引之后,將提取到的非聚集索引存儲到緩存;以及第三獲取單元,用于當再次確定通過非聚集索引對非索引覆蓋的數據庫進行查詢時,獲取緩存中的非聚集索引。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京國雙科技有限公司,未經北京國雙科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410086556.7/2.html,轉載請聲明來源鉆瓜專利網。
- 數據顯示系統、數據中繼設備、數據中繼方法、數據系統、接收設備和數據讀取方法
- 數據記錄方法、數據記錄裝置、數據記錄媒體、數據重播方法和數據重播裝置
- 數據發送方法、數據發送系統、數據發送裝置以及數據結構
- 數據顯示系統、數據中繼設備、數據中繼方法及數據系統
- 數據嵌入裝置、數據嵌入方法、數據提取裝置及數據提取方法
- 數據管理裝置、數據編輯裝置、數據閱覽裝置、數據管理方法、數據編輯方法以及數據閱覽方法
- 數據發送和數據接收設備、數據發送和數據接收方法
- 數據發送裝置、數據接收裝置、數據收發系統、數據發送方法、數據接收方法和數據收發方法
- 數據發送方法、數據再現方法、數據發送裝置及數據再現裝置
- 數據發送方法、數據再現方法、數據發送裝置及數據再現裝置





