Unicode 圧縮の実装

SQL Server では、Standard Compression Scheme for Unicode (SCSU) アルゴリズムの実装を使用して、行またはページの圧縮オブジェクトに格納する Unicode 値を圧縮します。これらの圧縮オブジェクトでは、nchar(n) 列および nvarchar(n) 列の Unicode 圧縮が自動的に行われます。データベース エンジンでは、ロケールに関係なく、Unicode データが 2 バイトで格納されます。これは UCS-2 エンコードと呼ばれています。ロケールによっては、SQL Server の SCSU 圧縮実装で保存できる最大領域がストレージ領域の 50% になる場合があります。

サポートされるデータ型

Unicode 圧縮では、固定長の nchar(n) データ型および nvarchar(n) データ型がサポートされます。行外または nvarchar(max) 列に格納されるデータ値は圧縮されません。

注意

nvarchar(max) のデータでは、行内に格納される場合であっても Unicode 圧縮はサポートされません。ただし、ページ圧縮はサポートされます。

以前のバージョンの SQL Server からのアップグレード

SQL Server データベースを SQL Server 2008 R2 にアップグレードした場合、圧縮されているか圧縮されていないかにかかわらず、データベース オブジェクトに対して Unicode 圧縮に関連する変更は加えられません。データベースのアップグレード後、オブジェクトには次のような影響があります。

  • オブジェクトが圧縮されていない場合、何も変更は加えられず、オブジェクトは以前と同様に機能します。

  • 行またはページ圧縮されたオブジェクトは、以前と同様に機能します。圧縮されていないデータは、値が更新されない限り、圧縮されていない形式のままになります。

  • 行またはページ圧縮されたテーブルに新しい行を挿入すると、Unicode 圧縮を使用して圧縮されます。

    注意

    Unicode 圧縮を十分に活用するには、ページまたは行の圧縮を使用してオブジェクトを再構築する必要があります。

Unicode 圧縮によるデータ ストレージへの影響

行またはページの圧縮で圧縮されているテーブル内で、インデックスが作成または再構築されたときや値が変更されたとき、その影響を受けたインデックスまたは値は、圧縮後のサイズが現在のサイズより小さくなる場合に限り、圧縮して格納されます。これにより、Unicode 圧縮によってテーブルの行またはインデックスのサイズが大きくなる状況が回避されます。

圧縮により節約されるストレージ領域は、圧縮されるデータの特性とデータのロケールによって異なります。次の表に、いくつかのロケールで節約できる領域の一覧を示します。

ロケール

圧縮率

英語

50%

ドイツ語

50%

ヒンディー語

50%

トルコ語

48%

ベトナム語

39%

日本語

15%