Sql server NVARCHAR(最大)是否比NVARCHAR(N)消耗更多的存储空间(物理大小)
在SQL Server中,如果创建一个Sql server NVARCHAR(最大)是否比NVARCHAR(N)消耗更多的存储空间(物理大小),sql-server,database,tsql,size,nvarchar,Sql Server,Database,Tsql,Size,Nvarchar,在SQL Server中,如果创建一个NVARCHAR(MAX)类型的列,并且只在其中填充128个字符,那么它是否比创建为NVARCHAR(128)类型的列消耗更多的存储空间?或者它的大小相同?我做了一个小实验,使用以下代码创建2个表,并用同样随机的128个字符填充该表: CREATE TABLE dbo.MyTextFix ( [val] NVARCHAR(128) NOT NULL ) CREATE TABLE dbo.MyTextMax ( [val] NVARCHAR(M
NVARCHAR(MAX)
类型的列,并且只在其中填充128个字符,那么它是否比创建为NVARCHAR(128)
类型的列消耗更多的存储空间?或者它的大小相同?我做了一个小实验,使用以下代码创建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
创建表dbo.MyTextFix(
[val]NVARCHAR(128)不为空
)
创建表dbo.MyTextMax(
[val]NVARCHAR(最大值)不为空
)
不计数;
声明@COUNT INT=0
(@计数< p>存储可能相同),需要考虑以下
MAX将在LOB分配中的行外存储数据
当您使用MAX并运行查询时,优化器可能会授予不必要的更多内存
当值被存储在行中时,空间将是相同的。如果由于行/页中的其他列需要将其存储在行之外,则max类型将更大。除了存储之外,考虑SQL Server将需要考虑查询计划中的最大类型的可能内存,所以不要使用VARCHAR(MAX)。除非您需要超过4000个字符。要添加到@ DanGuzman的注释中,我将列数据类型宽度视为一种约束。如果您编写的应用程序预期不超过(在示例中)128个字符,则使其成为<代码> NVARCHAR(128)< /代码>,而不管是否<代码> NVARCHAR(MAX)。
将这些相同的字符存储在等量的存储器中。