首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用聚集索引时是否读取"out of the row“字段?

使用聚集索引时是否读取"out of the row“字段?
EN

Database Administration用户
提问于 2015-01-02 14:31:43
回答 2查看 495关注 0票数 10

我知道,当使用VARCHAR(MAX)/NVARCHAR(MAX)列时,数据被存储为out of the row --数据行将有一个指针指向存储“大值”的另一个位置。

我有以下问题:

  1. 每个字段是存储out of the row还是只存储max字段?
  2. 如果使用表的clustered index读取整个记录,那么存储在行之外的字段也会读取吗?

VARCHAR(MAX)或NVARCHAR(MAX)被认为是“大值类型”。大型值类型通常存储在“行外”。这意味着..。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2015-01-02 14:53:24

我知道当使用VARCHAR(MAX)/NVARCHAR(MAX)列时,数据存储在行之外.

实际上,这取决于large value types out of row选项的设置,该选项可以使用sp_tableoption设置。来自文档

默认情况下,MAX值将存储在行中,最多可存储8000字节(如果合适的话)。除非您已经使用sp_tableoption来更改默认设置,否则您的MAX数据很可能存储在行中。

尽管如此,对于不会超过8000字节的值使用MAX数据类型是很糟糕的做法--使用非最大类型代替。除了其他之外,在处理MAX类型时,性能通常要差得多,因为Server必须准备好处理可能高达2GB大小的数据。

每个字段是存储在行之外的还是仅存储在最大的字段中?

只有MAX的。此外,如果将先前在行中的MAX列移出行,则仅影响该行中的该列。它在行中被指向off行LOB结构的指针替换.在某些情况下,可以将非最大列移出行。

如果使用表的聚集索引来读取整个记录,那么存储在行之外的字段也会读取吗?

扫描聚集索引只遍历行内数据.如果查询需要行外数据,则使用行内指针查找数据。

票数 13
EN

Database Administration用户

发布于 2015-01-02 14:57:59

大型对象存储的此行为可以通过表设置来控制:

exec sp_tableoption N'MyTable', 'large value types out of row', <'ON' or 'OFF'>

Server 2012文档中的引用位于:http://msdn.microsoft.com/en-us/library/ms173530.aspx

因此,您可以控制使用空间的位置、行内空间或存储在行外的空间。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/87435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档