当前位置: 代码迷 >> Sql Server >> sql server char varchar null 占用空间解决方法
  详细解决方案

sql server char varchar null 占用空间解决方法

热度:78   发布时间:2016-04-24 09:47:17.0
sql server char varchar null 占用空间
有2个 列 char(10), varchar(10),, 插入NULL 的时候的, varchar 占用了2个字节标记位, char 占用 多少 ?
在实际测试中 DBCC IND  DBCC PAGE,发现占用字节是一样的,

------解决思路----------------------


drop table test_char_null , test_char_notnull , test_varchar_null , test_varchar_notnull
go
create table test_char_null(t char(4000))
go
create table test_char_notnull(t char(4000))
go
create table test_varchar_null(t varchar(4000))
go
create table test_varchar_notnull(t varchar(4000))
go
insert into test_char_null(t) values(null)
go 10000
insert into test_char_notnull(t) values('1')
go 10000

insert into test_varchar_null(t) values(null)
go 10000
insert into test_varchar_notnull(t) values('1')
go 10000
sp_spaceused test_char_null
go
sp_spaceused test_char_notnull
go
sp_spaceused test_varchar_null
go
sp_spaceused test_varchar_notnull
go


name                  rows        reserved      data          index_size         unused
--------------------- ----------- ------------- ------------- ------------------ -------
test_char_null        10000       40008 KB      40000 KB      8 KB               0 KB

name                  rows        reserved      data          index_size         unused
--------------------- ----------- ------------- ------------- ------------------ -------
test_char_notnull     10000       40072 KB      40000 KB      8 KB               64 KB

name                  rows        reserved      data          index_size         unused
--------------------- ----------- ------------- ------------- ------------------ -------
test_varchar_null     10000       136 KB        120 KB        8 KB               8 KB

name                  rows        reserved      data          index_size         unused
--------------------- ----------- ------------- ------------- ------------------ -------
test_varchar_notnull  10000       200 KB        152 KB        8 KB               40 KB



------解决思路----------------------
#4:
A)分配的存放空间是按照最大长度预留的。
B)char 也要有值信息(标记)用来指示值是否为 NULL。
值信息的长度应该是固定的,所以 record size 一样是应该的。

注:稀疏存储方式例外。
  相关解决方案