Поделиться через


Реализация сжатия Юникода

В SQL Server используется реализация алгоритма стандартной схемы сжатия Юникода (SCSU), которая сохраняет данные в сжатых объектах строк или страниц. Для этих объектов сжатие Юникода для столбцов типов nchar(n) и nvarchar(n) выполняется автоматически. Компонент Database Engine хранит данные Юникода в виде 2 байтовых символов, независимо от локали. Такая кодировка называется UCS-2. Для некоторых локалей реализация сжатия по SCSU в SQL Server может сэкономить до 50% места в хранилище.

Поддерживаемые типы данных

Сжатие Юникода поддерживает типы данных фиксированной длины nchar(n) и nvarchar(n). Внестрочные значения данных и значения, хранящиеся в столбцах nvarchar(max), не сжимаются.

ПримечаниеПримечание

Для данных nvarchar(max) не поддерживается сжатие Юникода, даже если они хранятся в строке. Но этот тип данных дает преимущество при сжатии страниц.

Обновление с предыдущих версий SQL Server

При обновлении базы данных SQL Server до SQL Server 2008 R2 все изменения, связанные со сжатием Юникода, не оказывают влияния на объекты базы данных, сжатые или распакованные. После обновления базы данных ситуация с объектами выглядит следующим образом.

  • Если объект не сжат, то никаких изменений не происходит и объект продолжает работать как раньше.

  • Сжатые объекты строк и страниц продолжают работу как раньше. Распакованные данные остаются в распакованной форме до тех пор, пока их значение не будет обновлено.

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

    ПримечаниеПримечание

    Для использования всех преимуществ сжатия Юникода объект необходимо перестроить с использованием сжатия страниц или строк.

Влияние сжатия Юникода на хранилище данных

При создании или перестройке индекса, а также при изменении значения в таблице, сжатой на уровне строк или страниц, соответствующий индекс или значение сохраняется в сжатом виде только в том случае, если его размер в сжатом виде будет меньше текущего. Сжатие Юникода позволяет предотвратить разрастание размера строк в таблице или индексе.

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

Локаль

Процент сжатия

Английский язык

50%

Немецкий язык

50%

Хинди

50%

Турецкий язык

48%

Вьетнамский

39%

Японский язык

15%