J. Mini Asked: 2024-04-16 02:37:23 +0800 CST2024-04-16 02:37:23 +0800 CST 2024-04-16 02:37:23 +0800 CST NVARCHAR(max) 列会从行压缩中受益吗? 772 我有一张桌子,我相信它的大小大部分归功于一根巨大的NVARCHAR(max)柱子。我不知道如何测试它的大部分大小来自哪里。无论如何,这样的表会受益于行压缩吗?或者NVARCHAR(max)已经以可变长度的方式保证行压缩不执行任何操作? sql-server 1 个回答 Voted Best Answer David Browne - Microsoft 2024-04-16T02:53:05+08:002024-04-16T02:53:05+08:00 不会。使用行压缩nvarchar(n)将受益于Unicode 压缩。但不是nvarchar(max)。 因为数据是未压缩的,所以可以用datalength来衡量存储大小: select avg(datalength(SomeCol)) AvgLenBytes, count(SomeCol) NumValues, sum(datalength(SomeCol)) TotalBytes from SomeTable 如果不经常访问大列,有时可以通过使用sp_tableoption设置将所有值强制移出主行来提高性能large value types out of row。 如果nvarchar(max)每次访问行时都访问列,那么它不会有帮助。但是,如果您更频繁地选择其他列,尤其是扫描整个表时,那么推nvarchar(max)离行会有所帮助。
不会。使用行压缩
nvarchar(n)
将受益于Unicode 压缩。但不是nvarchar(max)
。因为数据是未压缩的,所以可以用datalength来衡量存储大小:
如果不经常访问大列,有时可以通过使用sp_tableoption设置将所有值强制移出主行来提高性能
large value types out of row
。如果
nvarchar(max)
每次访问行时都访问列,那么它不会有帮助。但是,如果您更频繁地选择其他列,尤其是扫描整个表时,那么推nvarchar(max)
离行会有所帮助。