行记录大于8k

SQL Server 2005使用的依旧是8096bytes的page,但是与之前版本不同的是,它允许你超出8K的限制。但是对于一个特定列来说,仍然不允许超过8K的限制,除了LOB类型。比如你不能定义varchar(9000)或者nvarchar(5000)类型,有人说可以定义varchar(max)或nvarchar(max),但是很可惜,这两种新加类型是LOB类型,跟varchar,nvarchar本质不同。

我们回归正题,但是我们可以声明总和超过8096bytes的row,比如 mytable(a varchar(1000),b nvarchar(4000)),这在2005是允许的。那么2005是如何在内部处理这些过大的行的呢?其实在内部,它会先判断你实际数据的大小,如果你执行了insert into mytable select 'a','b',实际row的大小是3bytes(不包含page头信息),sql server会把这行存在IN_ROW_DATA类型的page中,这种page速度最快。如果你你执行了insert into mytable select 'a',replacate('b',4000),那么大小为8003bytes,超过了8000bytes,(96bytes为page头信息)那么列b将被重新分配到一个ROW_OVERFLOW_DATA 类型的page中,在原IN_ROW_DATA页中记录新页的地址信息。这就是为什么2005能使行大小突破8k限制的原因。

所以当行大小超过8k时,设计表结构时要注意提高数据访问的效率了,因为IN_ROW_DATA速度最快,ROW_OVERFLOW_DATA 次之,LOB_DATA 最慢(存储大类型text,image等),最好不要让row 大小超越8k以提高效率。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zbc1009/archive/2008/05/06/2404274.aspx

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值