SQL Serverでテーブルを作成する場合、データ圧縮を使用するオプションがあります。
データ圧縮は、データベースのサイズを縮小するのに役立ちます。また、データがより少ないページに保存されるため、I / Oを多用するワークロードのパフォーマンスを向上させることができ、クエリがディスクから読み取る必要のあるページ数を減らすことができます。
これを行うには、DATA_COMPRESSION
を使用します テーブルを作成するときのオプション。
例
実例を示します。
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = ROW);
この場合、行圧縮を使用します。
以下はページ圧縮を使用しています。
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = PAGE);
圧縮を削除する方法
ALTER TABLE
を使用して、圧縮を削除できます NONE
を使用しながら、テーブルを再構築するステートメント 圧縮タイプとして。
ALTER TABLE MOVIES
REBUILD WITH (DATA_COMPRESSION = NONE);
列ストアテーブル
列ストアテーブル(クラスター化された列ストアインデックスで格納されたテーブル)を使用している場合、上記の圧縮タイプは適用されません。この場合、圧縮オプションはCOLUMNSTORE
です。 およびCOLUMNSTORE_ARCHIVE
。
圧縮結果は変動する可能性があります
取得する圧縮の量は、データと圧縮の種類によって異なります。
ROW
たとえば、圧縮では、列の値を可変長形式で格納することにより、不要なバイトを列の値から削除します。 PAGE
一方、圧縮では、繰り返し値がページごとに1回だけ格納され、ページ内のそれぞれの列からポインタが設定されます。
オブジェクトを圧縮しても必ずしもサイズが小さくなるとは限らない場合があります。場合によっては、実際に大きくなる場合もあります。 そのサイズ。
これは、列が圧縮の恩恵を受けないデータ型を使用している場合に発生する可能性があります。
また、行の圧縮によりメタデータのオーバーヘッドが削減されますが、場合によっては、オーバーヘッドが古いストレージ形式よりも大きくなることがあります。
データタイプが原因でデータが圧縮の恩恵を受けない場合は、オーバーヘッドによってストレージ要件が減少するのではなく、増加する可能性があります。
ただし、圧縮サイズの変動は実際のデータにも依存します。たとえば、 char(10)がある場合 列の場合、圧縮すると末尾のパディング文字がすべて削除されます。末尾にパディング文字が含まれる行がたくさんある場合は、末尾にパディング文字が含まれる行がない(または少ない)場合よりも良い結果が得られるはずです。