行内数据

所谓行内数据,最近在讲课中也提到了:SQL Server的行(Row)是不能跨页(Page)的, 准确地说,一行数据的长度最多是8060字节。那么对于那些超过大小的数据怎么办呢?按照正常的理解是,它们是单独存放在一个位置的,在行里面放置了一个指针。

那么,有没有这样一种情况,就是说,我确实是一个很大的数据类型,但是当前这一行所给我赋的值并没有那么多,例如它确实只有100Byte。是不是一定要千篇一律地放在行外面去?

这些数据类型是什么呢?以及他们都受什么选项的影响来决定如何存储数据呢?

text,ntext,image ==》这三个比较旧的数据类型受到 text in row这个选项的影响

可以按照以下方式通过使用 sp_tableoption 为表启用 text in row 选项:

sp_tableoption N'MyTable', 'text in row', 'ON'

或者,可以为能够在数据行中存储的 textntextimage 字符串长度指定从 24 到 7,000 字节的最大限制:

sp_tableoption N'MyTable', 'text in row', '1000'

如果指定的是 ON 而不是一个特定的限制,则此限制的默认值为 256 字节。该默认值使您能够从使用 text in row 选项中获得最多的性能收益。虽然通常情况下,不应使该值的设置低于 72,但也不应将其设置的过高。该设置尤其适用于其中大多数语句都不引用 textntextimage 列的表,或其中有多个 textntextimage 列的表。

如果设置了较大的 text in row 限制,且行本身存储了许多字符串,则可以显著减少存储在每页上的数据行数。如果大多数引用表的语句都不访问 textntextimage 列,则减少页中的行数会增加处理查询时必须读取的页数。减少每页上的行会增加索引和页的大小,优化器找不到可用的索引时可能必须扫描这些索引和页。text in row 限制的默认值为 256,这足以确保小型字符串和根文本指针可以存储在行中,但不会使每页上的行减少太多以至影响性能。

对于具有表数据类型的变量和用户定义函数(返回)返回的表,text in row 选项自动设置为 256。不能更改该设置。

也可以使用 sp_tableoption 指定 OFF0 选项值来禁用此选项。

sp_tableoption N'MyTable', 'text in row', 'OFF'

 

varchar(max),nvarchar(max),varbinary(max),XML==》这四种类型受到large value types out of row这个选项的影响

如果指定为 OFF,则 varchar(max)nvarchar(max)varbinary(max)xml 列的行内限制被设置为 8,000 字节。只有 16 字节的根指针存储在行内,而值存储在 LOB 存储空间中

sp_tableoption N'MyTable', 'large value types out of row', 'ON'
sp_tableoption N'MyTable', 'large value types out of row', 'OFF'
有关行内数据的更多细节,请参考下面的链接

http://technet.microsoft.com/zh-cn/library/ms189087(SQL.90).aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值