Sql-Server
壓縮 SQL Server 數據庫
- 有沒有辦法創建 SQL Server 2014 數據庫,以便自動壓縮所有數據表?
- 有沒有辦法壓縮 SQL Server 2014 數據庫的所有現有表?
背景:我們執行一個數據收集程序,將數百萬行表寫入數據庫,然後將其複製到單獨的電腦以進行離線分析和報告,通常位於不同的物理位置。獨立電腦不如數據收集電腦強大,並且磁碟空間有限,因此數據庫大小是一個問題。
編輯:我們使用 SQL Server 2014 Enterprise。每個表都有一個主鍵和兩個附加索引。
我不知道自動壓縮新表的方法。下面的腳本將壓縮尚未壓縮的現有表和索引。如果您無法控製表和索引創建 DDL,則可以定期安排此操作以壓縮新表。
DECLARE @SQL nvarchar(MAX) = ( SELECT N'ALTER ' + CASE WHEN type_desc ='HEAP' THEN 'TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + N'.' + QUOTENAME(OBJECT_NAME(object_id)) ELSE 'INDEX ' + QUOTENAME(name) + N' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + N'.' + QUOTENAME(OBJECT_NAME(object_id)) END + N' REBUILD WITH(DATA_COMPRESSION=ROW); ' FROM sys.indexes WHERE OBJECTPROPERTYEX(object_id, 'IsMSShipped') = 0 AND EXISTS( SELECT 1 FROM sys.partitions WHERE partitions.object_id = indexes.object_id AND partitions.index_id = indexes.index_id AND data_compression_desc = N'NONE' ) FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)'); EXEC sp_executesql @SQL;
請注意,壓縮功能僅在 SQL Server 2014 及更早版本的 Enterprise 和 Developer Edition 中可用。從 SQL Server 2016 SP1 開始,它也可用於標準版。