共用方式為


啟用資料表或索引的壓縮

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

此內容描述如何透過使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 中的現有資料表或索引上啟用資料壓縮。 如果要在建立資料表或索引時啟用資料壓縮,請參閱建立壓縮索引建立使用資料列壓縮的資料表範例。

限制

  • 系統資料表無法啟用壓縮。

  • 如果資料表是堆積,ONLINE 模式的重建操作將會是單一執行緒。 請針對多執行緒的堆積重建操作使用 OFFLINE 模式。 除非您為重建操作指定 OFFLINE 選項,否則一律為 ONLINE。 如需執行 ONLINE 重建的完整資訊,請參閱連線執行索引操作

  • 您無法在資料表具有非對齊索引時變更單一資料分割的壓縮設定。

  • 有幾種資料類型不受資料壓縮的影響。 如需詳細資訊,請參閱資料列壓縮如何影響儲存體

權限

需要具備資料表或索引的 ALTER 權限。

使用 SQL Server Management Studio

  1. 在 [物件總管] 中,展開包含您想要壓縮之資料表的資料庫,然後展開 [資料表] 資料夾。

  2. 若要壓縮索引,請展開包含您想要壓縮之索引的資料表,然後展開 [索引] 資料夾。

  3. 以滑鼠右鍵按一下要壓縮的資料表或索引,指向 [儲存體],然後選取 [管理壓縮...]。

  4. 在 [資料壓縮精靈] 的 [歡迎使用資料壓縮精靈] 頁面上,選取 [下一步]。

  5. [選取壓縮類型] 頁面上,選取要套用至您想要壓縮之資料表或索引中每個資料分割的壓縮類型。 完成後,選取 [下一步]。

    [選取壓縮類型] 頁面提供了下列選項:

    • [所有分割區使用相同的壓縮類型] 核取方塊

      選取此選項以針對所有資料分割設定相同的壓縮設定。 如此會啟用選取方塊,並停用方格中的 [壓縮類型] 資料行。 選取之後,相鄰清單中的選項包括 [無][資料列][頁面]

    • 資料分割編號

      列出資料表或索引中的每個資料分割。 此資料行是唯讀的。

    • [壓縮類型]

      選取每個資料分割的壓縮選項。 在選取 [所有資料分割使用相同的壓縮類型] 時無法使用。 清單選項包括 [無][資料列][頁面]

    • 界限

      顯示資料分割的界限。 此資料行是唯讀的。

    • 資料列計數

      顯示此資料分割中的資料列數目。 此資料行是唯讀的。

    • 目前空間

      顯示此資料分割所佔的目前空間 (以 MB 表示)。 此資料行是唯讀的。

    • 要求壓縮的空間

      選取 [計算]之後,此資料行會使用在 [壓縮類型] 資料行中指定的設定,顯示壓縮之後每個分割區的估計大小。 此資料行是唯讀的。

    • 計算

      選取此選項,即可使用在 [壓縮類型] 資料行中指定的設定,估計壓縮之後每個分割區的大小。

  6. [選取輸出選項] 頁面上,指定要如何完成壓縮。 選取 [建立指令碼] ,根據精靈中先前的步驟建立 SQL 指令碼。 選取 [立即執行] ,在完成精靈中的其餘所有頁面後建立新的分割區資料表。 選取 [排程] ,在預先定義的未來日期建立新的分割區資料表。

    如果您選取 [建立指令碼] ,在 [指令碼選項] 底下可以使用下列選項:

    • 編寫指令碼至檔案

      產生指令碼做為 .sql 檔案。 在 [檔案名稱] 方塊中輸入檔案名稱和位置,或選取 [瀏覽] 以開啟 [指令檔位置] 對話方塊。 從 [另存新檔] ,選取 [Unicode 文字][ANSI 文字]

    • 編寫指令碼至剪貼簿

      將指令碼儲存至剪貼簿。

    • 編寫指令碼至新增查詢視窗

      產生指令碼至新的 [查詢編輯器] 視窗。 這是預設選項。

    • 如果你選取 [排程],請選取 [變更排程]。

    1. 在 [新增作業排程] 對話方塊的 [名稱] 方塊中,輸入作業排程的名稱。

    2. [排程類型] 清單,選取排程類型:

      • 當 SQL Server Agent 啟動時自動啟動

      • 只要 CPU 閒置就啟動

      • 重複執行: 如果你的新資料分割資料表會使用新資訊定期更新,則請選取此選項。

      • 執行一次: 此選項是預設選取項目。

    3. 選取或清除 [已停用] 核取方塊,以啟用或停用排程。

    4. 如果您選取 [重複執行]

      1. [頻率] 底下的 [發生於] 清單中,指定發生頻率:

        • 如果您選取 [每天] ,在 [重複頻率] 方塊中,輸入幾天重複一次作業排程的頻率。

        • 如果您選取 [每週] ,在 [重複頻率] 方塊中,輸入幾週重複一次作業排程的頻率。 選取一週中執行作業排程是在星期幾。

        • 如果您選取 [每月] ,可以選取 [天][於]

          • 如果您選取 [天] ,請輸入執行作業排程的當月日期以及幾個月重複一次作業排程的頻率。 例如,若要在每兩個月的 15 日執行一次作業排程,請選取 [日],然後在第一個方塊中輸入 "15",並在第二個方塊中輸入 "2"。 第二個方塊允許輸入的最大數目是「99」。

          • 如果您選取 [於] ,請選取執行作業排程的當月一週中特定的星期幾,以及幾個月重複一次作業排程的頻率。 例如,若要在每兩個月的最後一個工作日執行一次作業排程,請選取 [日],然後從第一個清單中選取 [最後一個],並從第二個清單中選取 [工作日],然後在最後一個方塊中輸入 "2"。 您也可以在前兩個清單中選取 [第一個]、[第二個]、[第三個] 或 [第四個],以及特定工作日 (例如:星期日或星期三)。 最後一個方塊允許輸入的最大數目是「99」。

      2. [每日頻率] 底下,指定在執行作業排程當天重複作業排程的頻率:

        • 如果您選取 [執行一次於] ,請在 [執行一次於] 方塊中輸入執行作業排程的當天特定時間。 輸入時、分鐘和秒的時間,以及上午或下午。

        • 如果您選取 [重複執行於每] ,請在 [頻率] 底下指定在所選當天執行作業排程的頻率。 例如,若要在執行作業排程的當天每 2 個小時重複一次作業排程,請選取 [發生間隔],在第一個方塊中輸入 "2",然後從清單中選取 [小時]。 您也可以從這個清單中選取 [分鐘] 和 [秒]。 第一個方塊允許輸入的最大數目是「100」。

          [開始時間] 方塊中,輸入作業排程應該開始執行的時間。 在 [結束時間] 方塊中,輸入作業排程應該停止重複的時間。 輸入時、分鐘和秒的時間,以及上午或下午。

      3. [持續時間] 底下的 [開始日期] ,輸入您希望作業排程開始執行的日期。 選取 [結束日期][沒有結束日期] ,以指示作業排程應該停止執行的日期。 如果您選取 [結束日期] ,請輸入您希望作業排程停止執行的日期。

    5. 如果您選取 [執行一次],請在 [僅執行一次於] 底下的 [日期] 方塊中,輸入將要執行作業排程的日期。 在 [時間] 方塊中,輸入將要執行作業排程的時間。 輸入時、分鐘和秒的時間,以及上午或下午。

    6. [摘要] 底下的 [描述] ,確認所有作業排程設定是否都正確。

    7. 選取 [確定]。

    在完成此頁面之後,請選取 [下一步]。

  7. [檢閱摘要] 頁面上,展開 [檢閱您的選取項目] 底下的所有可用選項,確認所有壓縮設定是否都正確。 如果一切如預期,請選取 [完成]。

  8. [壓縮精靈進度] 頁面上,監視 [建立資料分割精靈] 動作的狀態資訊。 根據您在精靈中選取的選項,[進度] 頁面可能會包含一個或多個動作。 頂端的方塊會顯示精靈的整體狀態以及精靈已接收的狀態、錯誤和警告訊息數。

    [壓縮精靈進度] 頁面提供了下列選項:

    • 詳細資料

      提供從精靈所採取的動作傳回的動作、狀態和任何訊息。

    • 動作

      指定每個動作的類型和名稱。

    • 狀態

      指出整個精靈動作傳回 [成功] 或 [失敗] 的值。

    • 訊息

      提供從程序所傳回的任何錯誤或警告訊息。

    • Report

      建立包含 [建立分割區精靈] 結果的報表。 選項為 [檢視報表][將報表儲存到檔案][複製報表到剪貼簿][以電子郵件傳送報表]

    • 檢視報表

      開啟 [檢視報表] 對話方塊,其中包含 [建立分割區精靈] 進度的文字報表。

    • 將報表儲存到檔案

      開啟 [另存報表] 對話方塊。

    • 複製報表到剪貼簿

      將精靈進度報表的結果複製到剪貼簿。

    • [以電子郵件傳送報表]

      將精靈進度報表的結果複製到電子郵件。

    完成之後,請選取 [關閉]。

使用 Transact-SQL

在您選擇的資料庫,執行 sp_estimate_data_compression_savings (Transact-SQL),然後在資料表或索引啟用壓縮。 請參閱下列各節。

本文 Transact-SQL 程式碼範例使用 AdventureWorks2022AdventureWorksDW2022 範例資料庫,從 Microsoft SQL Server 範例和社群專案 首頁即可下載。

啟用資料表的壓縮

  1. 在物件總管中,連線到資料庫引擎的執行個體。

  2. 在標準列上,選取 [新增查詢]

  3. 確認您在資料庫的內容中。

  4. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例會先執行 sp_estimate_data_compression_savings 預存程序以傳回物件的估計大小 (如果要使用 ROW 壓縮設定的話)。 然後,此範例會針對指定資料表中的所有資料分割啟用 ROW 壓縮。

    EXEC sp_estimate_data_compression_savings 'Production', 'TransactionHistory', NULL, NULL, 'ROW';
    
    ALTER TABLE Production.TransactionHistory REBUILD PARTITION = ALL
    WITH (DATA_COMPRESSION = ROW);
    GO
    

啟用索引的壓縮

  1. 在物件總管中,連線到資料庫引擎的執行個體。

  2. 在標準列上,選取 [新增查詢]

  3. 確認您在資料庫的內容中。

  4. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例會先查詢 sys.indexes 目錄檢視以傳回 index_id 資料表上每個索引的名稱和 Production.TransactionHistory 。 然後,它會執行 sp_estimate_data_compression_savings 預存程序以傳回指定索引識別碼的估計大小 (若要使用 PAGE 壓縮設定)。 最後,此範例會重建索引識別碼 2 (IX_TransactionHistory_ProductID),指定 PAGE 壓縮。

    SELECT name, index_id
    FROM sys.indexes
    WHERE OBJECT_NAME (object_id) = N'TransactionHistory';
    
    EXEC sp_estimate_data_compression_savings
        @schema_name = 'Production',
        @object_name = 'TransactionHistory',
        @index_id = 2,
        @partition_number = NULL,
        @data_compression = 'PAGE';
    
    ALTER INDEX IX_TransactionHistory_ProductID ON Production.TransactionHistory REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE);
    GO
    

如需詳細資訊,請參閱 ALTER TABLEALTER INDEX