650 Numeric(19,4)列のテーブルを作成しました。実行してページ圧縮をオンにすると
ALTER TABLE fct.MyTable REBUILD WITH (DATA_COMPRESSION = PAGE);
私は得る
メッセージ1975、レベル16、状態1の
インデックス「PK_Mytable」の行の長さが、許容される最大長の「8060」バイトを超えています。
しかし、9バイトの650倍は5850バイトにすぎず、これは指定された制限の8060バイトからはかなりかけ離れています。
サーバーは、SQL Server 2016 SP1 CU2でWindows 2012 r2を実行しています
ページ圧縮を使用する場合の行オーバーヘッドは何ですか?
ここに私が何を意味するかを示すいくつかのコードがあります:
/* test script to demo MSG 1975 */
DECLARE @sql NVARCHAR(max)='', @i INT =0
drop table if exists dbo.mytable;
SET @sql = 'Create table dbo.Mytable (MyTableID bigint not null
identity(1,1) primary key clustered, '
WHILE @i < 593 BEGIN
SET @sql += ' Column' + LTRIM(@i) + ' numeric(19,4) null, '
SET @i +=1
END
SET @sql += ' LastColumn int) '
--SET @sql += ' with (DATA_COMPRESSION = ROW) '
SET @sql += ' with (DATA_COMPRESSION = PAGE) '
SELECT @sql
EXEC sys.sp_executesql @sql
SELECT top 10000 * FROM dbo.MyTable MT
行の圧縮も失敗しますが、行数が異なります。