Sql-Server

壓縮 SQL Server 數據庫

  • April 27, 2017
  1. 有沒有辦法創建 SQL Server 2014 數據庫,以便自動壓縮所有數據表?
  2. 有沒有辦法壓縮 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 開始,它也可用於標準版。

引用自:https://dba.stackexchange.com/questions/171775