SQL Server的性能主要取決於磁盤I/O效率,提高I/O效率某種程序上就意味著提高性能。SQL Server 2008提供了數據壓縮功能來提高磁盤I/O。
數據壓縮意味著減小數據的有磁盤占用量,所以數據壓縮可以用在表,聚集索引,非聚集索引,視圖索引或是分區表,分區索引上。
數據壓縮可以在兩個級別上實現:行級別和頁級別。頁級別壓縮包括行級別壓縮。表和索引在創建的同時就可以壓縮,也可以使用Alter Table Rebuild With 或是 Alter Index Rebuild With語法壓縮已存在表或是索引。當堆(Heap)上的壓縮狀態改變時,所有的非聚集索引也會重建。
下面讓我們看看壓縮過程到底都做了些什麼。
行壓縮:
頁壓縮:
下面我們來看一個例子:
USE tempdb
GO
CREATE TABLE TestCompression (col1 INT, col2 CHAR(50))
GO
INSERT INTO TestCompression VALUES (10, 'compression testing')
GO 5000
-- Original
EXEC sp_spaceused TestCompression
GO
-- DATA_COMPRESSION = ROW
ALTER TABLE TestCompression
REBUILD WITH (DATA_COMPRESSION = ROW);
GO
EXEC sp_spaceused TestCompression
GO
-- DATA_COMPRESSION = PAGE
ALTER TABLE TestCompression
REBUILD WITH (DATA_COMPRESSION = PAGE);
GO
EXEC sp_spaceused TestCompression
GO
-- DATA_COMPRESSION = NONE
ALTER TABLE TestCompression
REBUILD WITH (DATA_COMPRESSION = NONE);
GO
EXEC sp_spaceused TestCompression
GO