關(guān)于SQL Server內(nèi)部存儲(chǔ)結(jié)構(gòu)的,我覺(jué)得挺有意思,所以寫(xiě)下這篇博客討論并歸納了一下。問(wèn)題是這樣的:
首先我們創(chuàng)建兩張表,一張表的列長(zhǎng)度是4039字節(jié),另一張表的長(zhǎng)度是4040字節(jié),他們就只有一個(gè)字節(jié)的差距,比如以下創(chuàng)建表的SQL:
CREATE TABLE tb4039(c1 INT IDENTITY,c2 char(4035) not null)
CREATE TABLE tb4040(c1 INT IDENTITY,c2 char(4036) not null)
由于INT類(lèi)型是4個(gè)字節(jié),所以我們創(chuàng)建的tb4039表有4+4035=4039個(gè)字節(jié)的長(zhǎng)度,tb4040中的c2字段比tb4039中的c2字段多了一個(gè)字節(jié),總長(zhǎng)度是4040字節(jié),其他沒(méi)有區(qū)別了。接下來(lái)是向這兩個(gè)表中插入數(shù)據(jù),比如插入100條數(shù)據(jù),SQL語(yǔ)句是:
DECLARE @i INT
SET @i=1
WHILE @i<=100
BEGIN
INSERT INTO tb4039 (c2) VALUES('test'+CONVERT(VARCHAR(5),@i));
INSERT INTO tb4040 (c2) VALUES('test'+CONVERT(VARCHAR(5),@i));
SET @i=@i+1
END
使用SSMS來(lái)查看一下這兩個(gè)表的空間占用量,如果是SQL2005,那么可以使用SSMS自帶的報(bào)表查看,如果是SQL2008,那么直接使用對(duì)象資源管理器詳細(xì)信息界面進(jìn)行查看(如果使用的是SQL2008而不知道怎么查看表空間使用量那么請(qǐng)查看我以前寫(xiě)的一篇博客:SQL Server 2008新特性之SSMS增強(qiáng))。
首先我們創(chuàng)建兩張表,一張表的列長(zhǎng)度是4039字節(jié),另一張表的長(zhǎng)度是4040字節(jié),他們就只有一個(gè)字節(jié)的差距,比如以下創(chuàng)建表的SQL:
CREATE TABLE tb4039(c1 INT IDENTITY,c2 char(4035) not null)
CREATE TABLE tb4040(c1 INT IDENTITY,c2 char(4036) not null)
由于INT類(lèi)型是4個(gè)字節(jié),所以我們創(chuàng)建的tb4039表有4+4035=4039個(gè)字節(jié)的長(zhǎng)度,tb4040中的c2字段比tb4039中的c2字段多了一個(gè)字節(jié),總長(zhǎng)度是4040字節(jié),其他沒(méi)有區(qū)別了。接下來(lái)是向這兩個(gè)表中插入數(shù)據(jù),比如插入100條數(shù)據(jù),SQL語(yǔ)句是:
DECLARE @i INT
SET @i=1
WHILE @i<=100
BEGIN
INSERT INTO tb4039 (c2) VALUES('test'+CONVERT(VARCHAR(5),@i));
INSERT INTO tb4040 (c2) VALUES('test'+CONVERT(VARCHAR(5),@i));
SET @i=@i+1
END
使用SSMS來(lái)查看一下這兩個(gè)表的空間占用量,如果是SQL2005,那么可以使用SSMS自帶的報(bào)表查看,如果是SQL2008,那么直接使用對(duì)象資源管理器詳細(xì)信息界面進(jìn)行查看(如果使用的是SQL2008而不知道怎么查看表空間使用量那么請(qǐng)查看我以前寫(xiě)的一篇博客:SQL Server 2008新特性之SSMS增強(qiáng))。

