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 2014 にアップグレードした場合、Unicode 圧縮関連の変更は、圧縮または圧縮されていないデータベース オブジェクトに対しては行われません。 データベースのアップグレード後、オブジェクトには次のような影響があります。
オブジェクトが圧縮されていない場合、何も変更は加えられず、オブジェクトは以前と同様に機能します。
行またはページ圧縮されたオブジェクトは、以前と同様に機能します。 圧縮されていないデータは、値が更新されない限り、圧縮されていない形式のままになります。
行またはページ圧縮されたテーブルに新しい行を挿入すると、Unicode 圧縮を使用して圧縮されます。
注意
Unicode 圧縮を十分に活用するには、ページまたは行の圧縮を使用してオブジェクトを再構築する必要があります。
Unicode 圧縮によるデータ ストレージへの影響
行またはページの圧縮で圧縮されているテーブル内で、インデックスが作成または再構築されたときや値が変更されたとき、その影響を受けたインデックスまたは値は、圧縮後のサイズが現在のサイズより小さくなる場合に限り、圧縮して格納されます。 これにより、Unicode 圧縮によってテーブルの行またはインデックスのサイズが大きくなる状況が回避されます。
圧縮により節約されるストレージ領域は、圧縮されるデータの特性とデータのロケールによって異なります。 次の表に、いくつかのロケールで節約できる領域の一覧を示します。
Locale | 圧縮率 |
---|---|
英語 | 50% |
ドイツ語 | 50% |
ヒンディー語 | 50% |
トルコ語 | 48% |
ベトナム語 | 39% |
日本語 | 15% |
参照
データの圧縮
sp_estimate_data_compression_savings (Transact-SQL)
ページ圧縮の実装
sys.dm_db_persisted_sku_features (Transact-SQL)