NVARCHAR(MAX) 是否比 NVARCHAR(N) 消耗更多存储空间(物理大小)

ZiG*_*iGi 2 t-sql database sql-server size nvarchar

在 SQL Server 中,如果您创建类型为 的列NVARCHAR(MAX),并且仅在其中填充 128 个字符 - 它是否会比您创建它时消耗更多的存储空间NVARCHAR(128)- 或者它的大小相同?

ZiG*_*iGi 6

我做了一个小实验,使用以下代码创建 2 个表并用同样随机的 128 个字符填充它:

CREATE TABLE dbo.MyTextFix (
    [val] NVARCHAR(128) NOT NULL
)
CREATE TABLE dbo.MyTextMax (
    [val] NVARCHAR(MAX) NOT NULL
)

SET NOCOUNT ON;
DECLARE @COUNT INT = 0
WHILE (@COUNT <= 100000)
BEGIN
    DECLARE @VAL NVARCHAR(128) = CAST(NEWID() AS NVARCHAR(128)) + '-' + CAST(NEWID() AS NVARCHAR(128)) + '-' + CAST(NEWID() AS NVARCHAR(128)) + '-' + CAST(NEWID() AS NVARCHAR(128))
    INSERT INTO dbo.MyTextFix ([val]) VALUES (@VAL)
    INSERT INTO dbo.MyTextMax ([val]) VALUES (@VAL)
    SET @COUNT = @COUNT + 1
END
Run Code Online (Sandbox Code Playgroud)

现在 - 我们将使用“按表的磁盘使用情况”来检查表的实际大小:

在此输入图像描述

正如您所看到的,即使一个表具有 aNVARCHAR(128)而另一个表具有NVARCHAR(MAX)数据类型 - 如果我们只填充 128 个字符 - 两个表的大小相同。