Unicode 圧縮の実装

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL データベース

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

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

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

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

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

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

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

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

ロケール 圧縮率
英語 50%
ドイツ語 50%
ヒンディー語 50%
トルコ語 48%
ベトナム語 39%
日本語 15%