• SQLServer中的nvarchar(MAX)和nvarchar(50)在查询速度上有差吗?
  • 发布于 2个月前
  • 608 热度
    3 评论
如题,SQLServer中把某个字段的类型设置为nvarchar(MAX)和nvarchar(50),如果存储的字段长度一样,比如都是50个字符,那对于数据库的查询速度会有差别吗?
用户评论
  • 太伤人
  • 较大的nvarchar(最大)数据项(超过8000个字节左右)将溢出到文本存储中,并需要其他I / O。较小的项目将存储在行中。有控制此行为的选项- 有关更多详细信息,请参见此MSDN文章。

    如果存储在行中,则不会有明显的I / O性能开销;在处理数据类型时可能会有额外的CPU开销,但这可能很小。

    但是,将nvarchar(max)列留在不需要它们的数据库周围是很差的形式。它确实有一些性能开销,通常数据大小对于理解数据表非常有帮助-例如,一个50或100个字符宽的varchar列很可能是描述或自由文本字段,其中(例如)10- 20个字符可能是一个代码。您会惊讶于通过这样的假设人们常常必须从数据库中推断出多少含义。

    在数据仓库中(不经常在支持不佳或未提供文档的遗留系统上工作),具有易于理解的数据库架构非常有价值。如果您认为数据库是应用程序的旧版,请尝试与那些要从您那里继承数据库的人保持友好。
  • 2022/11/22 13:26:00 [ 0 ] [ 0 ] 回复
  • 心碎
  • 在SQL Server中,最大的行尺寸是8060字节。要超过这个限制,并且仍然管理每个都拥有高达2GB的存储,用TEXT和IMAGE类型存储的数据会被存储引擎自动地断行,在行里只留下一个16字节的指针。这意味着行的尺寸是减少了,这对性能有好处。然而,检索大数据是昂贵的,因为它不是与同一行的数据存放在同一个位置。

    max数据类型在默认情况下,使用TEXT/IMAGE溢出行为和正常尺寸的varchar/varbinary类型的行为的混合方式。如果一个字段的数据,加上表中所有其他字段的数据,总量少于8060字节,数据就存放在行内。如果数据超过8060字节,max字段的数据就会存放在行外。
  • 2022/11/22 13:25:00 [ 0 ] [ 0 ] 回复
  • 来自人海
  • nvarchar(MAX)和nvarchar(50)一个很重要的区别就是nvarchar(max)字段类型是不能建立索引的,而nvarchar(50)这种类型的字段是可以创建索引的,所以,如果在不考虑创建索引的前提下,且该字段不作为where条件查询时,如果这两个字段存储的数据长度是一样的,那在查询速度上应该是一样的
  • 2022/11/22 13:21:00 [ 0 ] [ 0 ] 回复