首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Microsoft SQL Server 2000 位圖優化技術深度解析:從雜湊聯接到星狀結構查詢的實戰應用

     編輯:關於SqlServer

前言

位圖 在 SQL Server 查詢優化器中扮演關鍵角色,特別是雜湊聯接與星狀結構查詢。SQL Server 7.0 首創於雜湊聯接內部使用位圖;SQL Server 2000 大幅增強,將位圖應用於外部聯接運算子、平行查詢、星狀結構篩選,並可在執行計畫中以 Bitmap Create / Bitmap Filter 運算子顯式觀察。

SQL Server 7.0:雜湊聯接內建位圖

  1. 建構階段:外部表 (Build Input) 所有聯接鍵雜湊分佈到雜湊表,同時產生位圖 — 每個位對應一個雜湊槽,1 表示該槽有鍵值,0 表示無。
  2. 探測階段:內部表 (Probe Input) 每行鍵值以相同雜湊函數映射到位圖。若對應位為 0,直接捨棄該行,完全避開雜湊表查找。
  3. 優勢:位圖極小 (通常數 KB),記憶體/快取友善,檢查成本遠低於雜湊表。位圖為雜湊聯接不可分割部分,不顯示於執行計畫。

SQL Server 2000:位圖增強與顯式化

1. 擴展至外部聯接與星狀結構

位圖不再限於內部雜湊聯接,可用於 LEFT/RIGHT/FULL OUTER JOIN 刪除無法產生聯接行的內部表行,以及 星狀結構事實表與維度表聯接 的維度篩選。

2. 執行計畫可見:Bitmap Create / Bitmap Filter

範例查詢:

SELECT S_NAME, S_ADDRESS, S_PHONE, S_COMMENT, PS_PARTKEY
FROM SUPPLIER, PARTSUPP
WHERE S_SUPPKEY = PS_SUPPKEY
  AND PS_PARTKEY BETWEEN 5000 AND 5999;

執行計畫 (圖 1) 顯示:

SQL Server 2000 執行計畫含 Bitmap Create/Filter

圖 1:星狀結構查詢執行計畫與位圖運算子

3. 平行查詢中的位圖傳遞

  • Repartition Streams:依聯接鍵重新分佈資料流,確保相同鍵值落在同一執行緒。
  • Bitmap Create:在聯接建構端 (維度表掃描後) 產生位圖。
  • Bitmap Filter:在事實表掃描端 (平行掃描前) 套用位圖,提前過濾 90%+ 不符合維度條件的行,大幅降低下游聯接與聚合成本。
  • 位圖在執行緒間透過共享記憶體高效傳遞,無序列化開銷。

星狀結構查詢位圖優化完整流程

  1. 掃描維度表 (如 PARTSUPP 篩選 PS_PARTKEY BETWEEN 5000 AND 5999)。
  2. 建構雜湊表同時產生位圖 (Bitmap Create)。
  3. 平行掃描事實表 (SUPPLIER) 時,每執行緒套用位圖 (Bitmap Filter)。
  4. 僅通過位圖檢查的行進入雜湊聯接 (Hash Match)。
  5. 最終結果聚合/輸出。

位圖大小與精度權衡

  • 位圖大小 = 雜湊槽數 (通常 2 的冪次,如 8192、16384 位 = 1-2 KB)。
  • 槽數越大 → 碰撞率越低 → 過濾精度越高 → 記憶體佔用越大。
  • 優化器根據外部表基數、可用記憶體動態決定。

實務觀察與調校建議

  1. 查看執行計畫 XML:搜尋 <BitmapCreate>、<BitmapFilter> 節點,確認位圖是否生效。
  2. 星狀結構必備:維度表建立叢集索引於聯接鍵,事實表建立非叢集索引於外鍵,配合位圖效能最大化。
  3. 平行度 (MAXDOP):位圖在平行查詢效益最高;若 MAXDOP=1 位圖仍會建立但無平行過濾效益。
  4. 追蹤旗標 9498 (非公開) 可停用位圖優化,僅供診斷比對使用。

總結

SQL Server 2000 將位圖從「雜湊聯接內部優化」昇級為「可見、可跨運算子傳遞、支援平行與星狀結構」的核心優化技術。理解 Bitmap Create → Bitmap Filter 流程,能幫助 DBA 診斷星狀查詢效能瓶頸、驗證索引設計、調整平行度策略,是資料倉儲與 BI 工作負載調校的必備知識。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved