SQL Server では、Unicode (SCSU) アルゴリズムの標準圧縮スキームの実装を使用して、行またはページ圧縮オブジェクトに格納されている Unicode 値を圧縮します。 これらの圧縮オブジェクトの場合、Unicode 圧縮は nchar(n)
列と nvarchar(n)
列に対して自動的に行われます。 データベース エンジンは、ロケールに関係なく、Unicode データを 2 バイトとして格納します。 これは UCS-2 エンコードと呼ばれます。 一部のロケールでは、SQL Server での SCSU 圧縮の実装により、ストレージ領域を最大 50% 節約できます。
サポートされるデータ型
Unicode 圧縮では、固定長の nchar(n)
と nvarchar(n)
のデータ型がサポートされます。 行外または nvarchar(max)
列に格納されているデータ値は圧縮されません。
注
Unicode 圧縮は、行に格納されている場合でも、 nvarchar(max)
データではサポートされていません。 ただし、このデータ型は引き続きページ圧縮のメリットを得ることができます。
以前のバージョンの SQL Server からのアップグレード
SQL Server データベースを SQL Server 2014 にアップグレードすると、Unicode 圧縮関連の変更は、圧縮または圧縮されていないデータベース オブジェクトには行われません。 データベースがアップグレードされると、オブジェクトは次のように影響を受けます。
オブジェクトが圧縮されていない場合、変更は行われず、オブジェクトは以前と同様に機能し続けます。
行またはページ圧縮オブジェクトは、以前と同様に引き続き機能します。 値が更新されるまで、圧縮されていないデータは圧縮されていない形式のままです。
行またはページ圧縮テーブルに挿入される新しい行は、Unicode 圧縮を使用して圧縮されます。
注
Unicode 圧縮の利点を最大限に活用するには、ページ圧縮または行圧縮を使用してオブジェクトを再構築する必要があります。
Unicode 圧縮がデータ ストレージに与える影響
インデックスが作成または再構築されたとき、または行またはページ圧縮で圧縮されたテーブルで値が変更された場合、影響を受けるインデックスまたは値は、圧縮されたサイズが現在のサイズより小さい場合にのみ圧縮されて格納されます。 これにより、Unicode 圧縮のためにテーブルまたはインデックスの行のサイズが大きくなるのを防ぐことができます。
圧縮によって保存されるストレージ領域は、圧縮されるデータの特性とデータのロケールによって異なります。 次の表に、各地域で実現できるスペースの節約を示します。
ロケール (地域設定) | 圧縮率 |
---|---|
英語 | 50% |
ドイツ語 | 50% |
ヒンディー語 | 50% |
トルコ語 | 48% |
ベトナム語 | 39% |
日本語 | 15% |
こちらもご覧ください
データの圧縮
データ圧縮の節約を推定する (Transact-SQL)
ページ圧縮の実装
sys.dm_db_persisted_sku_features (Transact-SQL)