300 GBを超えるサイズのテーブルを操作しますが、その一部は スパース列 を使用しますが、CPU使用率と常に一致するとは限りません この質問 が示しています。
スパース列を使用しないテーブルの場合 データ圧縮を実装したい-page
またはrow
に依存手順 sp_estimate_data_compression_savings またはこのスクリプトの結果について:
私は 正常に機能するインデックス作成スクリプト を生成するルーチンを持っています。
例としてこのテーブルを作成すると:
IF OBJECT_ID('[DBO].[t1]') IS NOT NULL
DROP TABLE [DBO].[t1]
GO
CREATE TABLE [DBO].[t1] (
[a] INT NOT NULL,
CONSTRAINT [PK__t1__3BD0198E286DEFE4]
PRIMARY KEY CLUSTERED ([a] asc))
私 create index scripts は私に与えます:
USE [ontime_new_test];
ALTER TABLE [dbo].[t1]
ADD CONSTRAINT [PK__t1__3BD0198E286DEFE4]
PRIMARY KEY CLUSTERED ( [a] ASC )
WITH ( PAD_INDEX = OFF, FILLFACTOR = 100 ,
IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF,
DATA_COMPRESSION=NONE, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
質問:
主キーを削除せずにこのテーブルにデータ圧縮を適用する方法はありますか?
基本的に私はこれをやりたいと思っています(data_compression=PAGE
)最初に制約を削除する必要なし:
USE [ontime_new_test];
ALTER TABLE [dbo].[t1]
ADD CONSTRAINT [PK__t1__3BD0198E286DEFE4]
PRIMARY KEY CLUSTERED ( [a] ASC )
WITH ( PAD_INDEX = OFF, FILLFACTOR = 100 ,
IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF,
DATA_COMPRESSION=PAGE, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
主キーを削除せずにこのテーブルにデータ圧縮を適用する方法はありますか?
はい、以下のコマンドを実行してクラスター化インデックスを再構築する必要があります(あなたの場合はPKでもあります)。
ALTER INDEX [PK__t1__3BD0198E286DEFE4] on TABLE [t1]
REBUILD with (ONLINE = ON, DATA_COMPRESSION = PAGE)
"ONLINE = ON"
句は、再構築中のテーブルのロックを大幅に削減するのに役立ちます
リファレンス: ALTER INDEX(Transact-SQL)
はい、主キーを削除せずにこのテーブルにデータ圧縮できます。あなたが言及したすべてのオプションを維持しながら、次のスクリプトはテーブルを圧縮します。このスクリプトは、非クラスター化インデックスを圧縮しません。
ALTER INDEX [PK__t1__3BD0198E286DEFE4] on TABLE [t1]
REBUILD WITH (PAD_INDEX = OFF, FILLFACTOR = 100,
STATISTICS_NORECOMPUTE = OFF, DATA_COMPRESSION=PAGE, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, DATA_COMPRESSION= PAGE, ONLINE=ON )
オプションONLINE=ON
を追加しましたが、オフラインで実行することもできます。 `オンラインインデックス操作を読む