Sql server 如果nvarchar列中的字符串短于最大长度,那么nvarchar列在磁盘上会占用多少空间
我想知道每一条记录的Sql server 如果nvarchar列中的字符串短于最大长度,那么nvarchar列在磁盘上会占用多少空间,sql-server,Sql Server,我想知道每一条记录的nvarchar(N)列在硬盘上会占用多少空间。它需要2xn字节(每个字符需要两个字节)还是需要不同的字节数,取决于每个记录中的数据 例如,我可以有一个表,其中只有一列类型为nvarchar(100),其中包含如下数字: 0000000000 0000000001 ..... 9999999999 我有100亿(10^10)条记录,每条记录有10个字符。硬盘需要多少空间?20Gb?200Gb?假设所有值的长度正好为10个字符,它们将占用的空间为: +--------
nvarchar(N)
列在硬盘上会占用多少空间。它需要2xn字节(每个字符需要两个字节)还是需要不同的字节数,取决于每个记录中的数据
例如,我可以有一个表,其中只有一列类型为nvarchar(100)
,其中包含如下数字:
0000000000
0000000001
.....
9999999999
我有100亿(10^10)条记录,每条记录有10个字符。硬盘需要多少空间?20Gb?200Gb?假设所有值的长度正好为10个字符,它们将占用的空间为:
+--------------+---------------+-------------------+-------+
| Type | Bytes per row | Total bytes | GB |
+--------------+---------------+-------------------+-------+
| NVARCHAR(10) | 22 | 220,000,000,000 | 220 |
| VARCHAR(10) | 12 | 120,000,000,000 | 120 |
| NCHAR(10) | 20 | 200,000,000,000 | 200 |
| CHAR(10) | 10 | 100,000,000,000 | 100 |
+--------------+---------------+-------------------+-------+
=2+(数据长度*2)
=2+数据长度
=2*列定义的长度
=Column_Defined_LengthAnvarchar(n)
Column使用(2*实际长度)+2字节的存储空间-无论存储什么,每个字符始终2字节
因此,如果您在nvarchar(100)
列中存储10位数字,则每个字符串使用2*10+2=22字节
但如果您只存储数字,为什么还要麻烦使用nvarchar
??数字应存储在数字列中。。。或者,如果您不能,那么至少使用varchar
,这将存储需求的一半(1个字符/数字=1个字节)Anvarchar(n)
列使用(2*实际长度)+2个字节的存储空间-无论存储什么,每个字符始终有2个字节。因此,如果在nvarchar(100)
列中存储10位数字,则每个字符串使用2*10+2=22字节。但如果您只存储数字,为什么还要麻烦使用nvarchar
??数字应该存储在数字列中……@marc_s您应该将此作为答案添加。感谢您的回答marc_s,我不是只在我的实表中存储数字,为了简单起见,我使用这些数字作为示例。如果它们总是十个字符长,并且只包含字符0-9,那么为什么不将它们存储为字符(10)哪个没有varchar/nvarchar的2字节开销?这假设数据压缩=无
(默认值),但可以使用创建/更改表
指定行
或页面
,以减少物理空间需求。压缩时的存储量取决于数据。压缩可以在SQL 2016 SP1+的所有SQL版本中使用,但在早期版本中需要Enterprise。