SQL Server 2008 的壓縮技術不再只是儲存格式變更,而是徹底重新設計了資料列與資料頁的底層結構。本文深入剖析列級壓縮、頁級壓縮(前綴+字典)、備份壓縮的運作機制與效能權衡。
SQL 2005 引入 vardecimal 儲存格式(企業版/開發版),本質是數值型的 varchar 版本。SQL 2008 則更進一步:啟用壓縮(ROW 或 PAGE)時,底層 Row/Page 格式完全不同於傳統格式。儲存引擎是唯一需識別新格式的元件,其他元件(查詢處理器、鎖管理器等)不受影響,故開發週期大幅縮短。
CHAR(100) 存「A」僅佔 1 byte + 中繼資料,不再佔 100 bytes。同一頁面內,同一欄位值若有共同前綴,僅儲存一次前綴,各列以指標參考:
原始值:'Chad', 'Chadwick', 'Chadly', 'Chad', 'Chadster', 'Chadwick', 'Chadly'
前綴 'Chad' 存入 CI 結構
壓縮後:'', '1wick', '1ly', '', '1ster', '1wick', '1ly' ('1' 代表前綴參考)
對頁面內重複值建立字典編碼:
字典:'1ly'→2, '1wick'→3
行內值:'', '2', '3', '', '1ster', '3', '2'
原本 ~25 bytes → 壓縮後 ~17 bytes(節省 30%+)
關鍵機制: 每頁獨立壓縮,前綴與字典存於頁內。頁面填滿達臨界點才觸發壓縮,避免半頁壓縮無意義。
| 指標 | 影響 |
|---|---|
| CPU 使用率 | 上升(壓縮/解壓運算) |
| I/O 使用率 | 大幅下降(資料量縮減) |
| 記憶體佔用 | 下降(緩衝區容納更多資料頁) |
| 查詢效能 | 通常提升(I/O 節省 > CPU 成本),視工作負載而定 |
所有壓縮功能(列級、頁級、備份、vardecimal)極可能僅限企業版與開發版。標準版不支援。