熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

Microsoft SQL Server 2000 中的位圖

2013-11-15 14:37:47  來源: SQL Server 

  摘要Microsoft SQL Server 從版本 開始使用內置位圖來提高執行查詢的速度通過在 SQL Server 中引入新的運算符可以將進一步的位圖篩選技術應用於源自大型數據集的更快速的查詢結果
  
  簡介
  本文首先介紹了在 Microsoft® SQL Server 的查詢優化中位圖的使用然後介紹了它們在 SQL Server &#; 中增強的應用
  
  SQL Server
  Microsoft SQL Server 在所有的散列聯接中無提示使用位圖散列聯接包含創建和探測兩個階段在創建階段其中一個已聯接的表(也稱為外部表)的所有聯接鍵都被分布到一個散列表中作為該散列操作的副產品SQL Server 將生成一個獨立的位圖其中表示外部表中沒有鍵值分布到該位表示外部表中有一個或多個鍵值分布到該位
  
  位圖的大小是在根據外部表中唯一值的數量而進行的優化查詢過程中決定的一旦外部表中所有的行都被散列後位圖就由 組成然後將使用與處理外部鍵相同的散列算法對探測表(也稱為內部表)中的每個鍵進行分布
  
  在檢查和搜索創建階段的散列表之前我們將先檢查位圖如果對應的條目為則該行在外部表中不可能有匹配值因此將被丟棄
  
  由於搜索位圖要比搜索散列表更經濟處理不生成聯接記錄的內部表中的行要比處理不帶位圖的行快由於位圖是散列聯接不可分割的一部分因此位圖將自動創建並且不會顯示在顯示方案的輸出中
  
  SQL Server
  Microsoft SQL Server 非常有效地使用了類似的位圖不僅在內部散列聯接中使用而且還用於外部聯接運算符以刪除包含不能生成任何聯接記錄的鍵值的行在創建位圖的顯示方案輸出中有一個Bitmap Create運算符在查詢優化過程中位圖被自動引用到查詢計劃中以下查詢示例便使用了包含這些位圖的計劃
  
  SELECT S_NAME  S_ADDRESS S_PHONE S_COMMENT PS_PARTKEY
  FROM  SUPPLIER PARTSUPP
  WHERE  S_SUPPKEY = PS_SUPPKEY AND
  PS_PARTKEY between AND
  
  該查詢從 SUPPLIER 表中選擇所有供應商這些供應商生產 系列中的所有部件(部件鍵值在 之間)除 SUPPLIER 表外我們還使用 PARTSUPP(部件供應商)表它包含了(針對每個部件)生產同一部件的不同供應商的所有記錄 顯示了由 SQL Server 生成的顯示方案圖解
   
  圖 示例查詢的執行計劃圖解
  
  對於每個數據流位圖都在聯接的外部輸入端上的散列聯接之前創建從左至右和從上至下查看上面的顯示計劃圖解將發現 PARTSUPP 表的掃描是並行的後面的交換運算符 (Parallelism/Repartition Streams) 使用鍵值分配行這樣它們將在並行的散列匹配(聯接)之前被置於包含 SUPPLIER 表的再分配行的對應流中先執行頂部分支直至散列聯接的散列表被填充底部分支沒有活動為止
  
  在掃描 SUPPLIER 表時我們已使用 PARTSUPP 鍵(在本查詢中為 PS_SUPPKEY 列)在頂部分支上創建了位圖每一個進入散列聯接的流都有一個位圖當 SUPPLIER 行在掃描後輸入交換運算符時我們首先要判斷它們將進入哪一個流如果在對應於鍵值(S_SUPPKEY 列)的項目中該行的位圖包含則丟棄該行因此在被置於適當的交換輸出流之前不符合條件的行將被刪除
  
  SQL Server 只在並行查詢計劃中使用這些位圖這是因為如果沒有交換運算符則在散列聯接中的位圖上沒有額外的補償除了上述使用散列聯接的方案外SQL Server 還在合並聯接中使用這些位圖但仍然只限於並行計劃並且在外部分支上存在 SORT 運算符SORT 運算符使 SQL Server 在處理內部表中的行之前先處理所有外部行因此使我們可以創建位圖如果在外部分支上沒有 SORT 運算符將同時處理合並聯接中來自內部表和外部表中的行這樣就不能使用位圖了
  
  測試結果顯示速度的提高
  通常由於采用位圖而產生的性能提高取決於被篩選出的行數該數目是可以變化的因此根據查詢執行中其他運算符的開銷的不同速度提高的幅度可以從小到無法測量到非常顯著
  
  圖 顯示了在大型數據庫( GB 的表 GB 的索引)中測試三種復雜查詢時所觀察到的速度提高測試是在實驗室中使用 RAM 為 GB 的 MHz 計算機完成的
  
  查詢 A 為包含結果匯總和排序的三個表(最大的表大約包含 GB 數據)的聯接查詢
  
  
  查詢 B 為包含相關子查詢的查詢
  
  
  查詢 C 為在聯接頂部包含匯總的六個表的聯接查詢
  
  圖 位圖篩選對三個大型數據庫的復雜查詢的優化
  
  結論
  在查詢優化過程中使用位圖是 SQL Server 采用的眾多技術之一旨在從大型數據集(如企業數據庫中的數據集)中最快的獲取查詢結果通過減少需要處理的行數使內部聯接和外部聯接查詢更有效迅速返回數據的同時還減少了服務器處理的工作量

From:http://tw.wingwit.com/Article/program/SQLServer/201311/22086.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.