Включение сжатия таблицы или индекса

Область применения:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureAzure Synapse AnalyticsБаза данных SQL в Microsoft Fabric

В этой статье описано, как включить сжатие данных для существующей таблицы или индекса в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Сведения о включении сжатия данных при создании таблицы или индекса см. в разделах Создание сжатого индекса и Создание таблицы, использующей сжатие строк.

Ограничения

  • В системных таблицах не может быть включено сжатие.

  • Если таблица является кучей, операция перестроения для ONLINE режима однопоточная. Используйте режим OFFLINE для многопоточных операций перестроения кучи. Операции перестроения выполняются OFFLINE, если вы не укажете параметр ONLINE. Полные сведения о выполнении перестроения см. в разделе "Выполнение операций ONLINE с индексами в Сети".

  • Если в таблице есть невыровненные индексы, настройку сжатия для отдельной секции изменить нельзя.

  • Несколько типов данных не влияют на сжатие данных. Дополнительные сведения см. в статье Влияние сжатия строк на хранение.

Разрешения

Необходимо разрешение ALTER для таблицы или индекса.

Использование SQL Server Management Studio

  1. В обозревателе объектов разверните базу данных, в которой содержится таблица, подлежащая сжатию, а затем разверните папку Таблицы .

  2. Чтобы сжать индекс, разверните таблицу, содержащую нужный индекс, затем разверните папку Индексы .

  3. Щелкните правой кнопкой мыши таблицу или индекс для сжатия, выберите хранение, а затем Управление сжатием...

  4. В мастере сжатия данных на странице Добро пожаловать в мастер сжатия данных нажмите кнопку Далее.

  5. На странице Выбор типа сжатия выберите тип сжатия, который будет применен к каждой выбранной секции таблицы или индекса. По завершении выберите Далее.

    Следующие параметры доступны на странице Выбор типа сжатия :

    • флажокИспользовать один тип сжатия для всех секций

      Выберите этот вариант, чтобы задать одинаковые параметры для всех секций. Он включает флажок выбора и делает недоступным столбец Тип сжатия в сетке. При его выборе в списке рядом появляются параметры: Нет, Строкаи Страница.

    • Номер раздела

      Перечисляет каждую секцию в таблице или индексе. Этот столбец доступен только для чтения.

    • Тип сжатия

      Выберите параметры сжатия для каждой секции. Недоступно, если выбран один и тот же тип сжатия для всех секций . Список параметров: Нет, Строкаи Страница.

    • Граница

      Отображает границу раздела. Этот столбец доступен только для чтения.

    • Количество строк

      Количество строк в данном разделе. Этот столбец доступен только для чтения.

    • Текущее пространство

      Отображает текущий размер, занимаемый разделом, в мегабайтах (МБ). Этот столбец доступен только для чтения.

    • Запрошенное сжатое пространство

      После нажатия кнопки Вычислитьв этом столбце будет показан приблизительный размер каждой секции после сжатия на основе значения в столбце Тип сжатия. Этот столбец доступен только для чтения.

    • Вычислить

      Выберите, чтобы оценить размер каждого раздела после сжатия, используя настройку, указанную в столбце Тип сжатия.

  6. На странице Выбор выходного параметра укажите способ завершения сжатия. Выберите Создать скрипт для создания скрипта SQL на основе данных на предыдущих страницах мастера. Выберите Запустить немедленно, чтобы создать новую секционированную таблицу после завершения всех оставшихся страниц в Мастере настройки. Выберите Расписание , чтобы создать новую секционированную таблицу в заранее заданное время в будущем.

    При выборе Создать скриптв Параметры скриптабудут доступны следующие параметры:

    • Запись скрипта в файл

      Создает скрипт в виде .sql файла. Введите имя и местоположение файла в поле Имя файла или нажмите кнопку Обзор, чтобы открыть диалоговое окно Расположение файла скрипта. В разделе Сохранить каквыберите Текст в Юникоде или Текст ANSI.

    • Вывести скрипт в буфер обмена

      Сохраняет скрипт в буфер обмена.

    • Вывести скрипт в новое окно запроса

      Скрипт создается в новом окне редактора запросов. Это параметр выбирается по умолчанию.

    • При выборе Расписание щелкните Изменить расписание.

    1. В диалоговом окне Создание расписания задания в поле Имя введите имя расписания задания.

    2. В списке Тип расписания выберите тип расписания:

      • Запускать автоматически при запуске агента SQL Server

      • Запускать при бездействии процессоров

      • Повторяющееся. Выберите этот параметр, если новая секционированная таблица регулярно обновляется с учетом новых данных.

      • Однократно. Этот параметр выбран по умолчанию.

    3. Установите или снимите флажок Включен , чтобы включить или отключить расписание.

    4. При выборе Повторяющееся:

      1. В разделе Частотав списке Выполняется укажите частоту выполнения:

        • При выборе Ежедневнов поле Выполняется каждые укажите частоту повторного выполнения расписания задания в днях.

        • При выборе Еженедельнов поле Выполняется каждые укажите частоту повторного выполнения расписания задания в неделях. Выберите день или дни недели, в которые выполняется расписание задания.

        • При выборе Ежемесячнощелкните День или Определенный.

          • При выборе Деньвведите дату месяца, в которую должно выполняться расписание задания, и укажите частоту повторного выполнения расписания задания в месяцах. Например, если требуется, чтобы расписание задания выполнялось 15 числа каждого второго месяца, выберите День и введите в первом поле 15 и 2 — во втором поле. Наибольшее число, допустимое во втором поле, — "99".

          • При выборе The, выберите конкретный день недели в месяце, в который должно выполняться расписание задания, и укажите, с какой периодичностью в месяцах повторяется это расписание. Например, если требуется, чтобы расписание задания выполнялось в последний день недели каждого второго месяца, выберите День, затем последний в первом списке и рабочий день во втором списке, а потом введите "2" во втором поле. Еще можно выбрать первый, второй, третийили четвертый, а также конкретные дни недели (например, воскресенье или среду) в первых двух списках. Наибольшее число, допустимое в последнем поле, — "99".

      2. В поле Ежедневная частота укажите, как часто повторяется расписание задания в те дни, когда оно выполняется.

        • При выборе Выполнять раз в, укажите конкретное время, когда должно выполняться расписание задания, в поле Выполнять раз в. Укажите время дня: час, минуту, секунду, а также AM или PM.

        • При выборе Выполняется каждыеукажите частоту выполнения задания в выбранный день в поле Частота. Например, если нужно, чтобы расписание выполнялось каждые 2 часа в течение дня, выберите Выполняется каждые, введите "2" в первое поле, а затем выберите в списке часы. В этом списке также можно выбрать минуты и секунды. Наибольшее число, допустимое в первом поле, — "100".

          В поле Начинать в введите время для запуска задания по расписанию. В поле Время окончания введите время, когда расписание задания должно перестать повторяться. Укажите время дня: час, минуту, секунду, а также AM или PM.

      3. В разделе Длительность, в области Дата началавведите дату начала запуска расписания задания. Выберите Дата окончания или Без даты окончания , чтобы указать дату завершения выполнения расписания задания. При выборе Дата окончания введите дату, когда вы хотите, чтобы расписание задания было остановлено.

    5. При выборе значения Однократно в Однократное выполнение в поле Дата введите дату, когда расписание задания будет выполнено. В поле Время введите время запуска расписания задания. Укажите время дня: час, минуту, секунду, а также AM или PM.

    6. В разделе Сводкав Описаниепроверьте правильность всех параметров расписания задания.

    7. Нажмите ОК.

    После завершения работы с этой страницей нажмите кнопку Далее.

  7. На странице Просмотр сводки в разделе Просмотр выбранных параметровразверните все доступные параметры, чтобы проверить правильность всех настроек сжатия. Если все настройки правильные, нажмите кнопку Готово.

  8. На странице Ход выполнения мастера сжатия можно следить за сведениями о состоянии действий Мастера создания разделов. В зависимости от параметров, выбранных в мастере настройки, страница выполнения может содержать одно или несколько действий. В верхнем поле показано общее состояние мастера и число полученных им сообщений о состоянии, предупреждений и сообщений об ошибках.

    На странице Прогресс мастера сжатия доступны следующие параметры.

    • Сведения

      Предоставляет информацию о действиях, состоянии и любых сообщениях, которые возвращаются в результате действий мастера.

    • Действие

      Задает тип и имя каждого действия.

    • Состояние

      Указывает, вернуло ли действие мастера в целом значение Успешно или Ошибка.

    • Сообщение

      Любые сообщения об ошибках или предупреждения, которые возвращаются процессом.

    • Отчет

      Создает отчет, содержащий результаты мастера создания разделов. Доступные параметры: Просмотреть отчет, Сохранить отчет в файл, Копировать отчет в буфер обменаи Отправить отчет по электронной почте.

    • Просмотреть отчет

      Открытие диалогового окна Просмотр отчета , которое содержит текстовый отчет о работе мастера создания секций.

    • Сохранить отчет в файл

      Открытие диалогового окна Сохранить отчет как .

    • Копировать отчет в буфер обмена

      Копирование результатов отчета о работе мастера в буфер обмена.

    • Отправить отчет по электронной почте

      Копирование результатов отчета о состоянии мастера в сообщение электронной почты.

    По завершении нажмите кнопку Закрыть.

Использование Transact-SQL

В выбранной базе данных запустите sp_estimate_data_compression_savings (Transact-SQL) и включите сжатие таблицы или индекса. См. следующие разделы.

Образцы кода в этой статье используют образцы баз данных AdventureWorks2025, AdventureWorksDW2025 или AdventureWorksLT2025, которые можно скачать из репозитория GitHub Azure Data SQL Samples Repository.

Включение сжатия таблицы

  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 параметр сжатия. Наконец, в примере выполняется перестроение индекса ID 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 TABLE и ALTER INDEX.