如果我将一列声明为 nvarchar(max) ,我知道这将分配 2Gb 的空间,但是一旦我将更改保存到表中,它实际上是否会立即占用 2Gb 的磁盘空间?或者,它是否注意到该列将允许在该列中填充 2Gb 的数据?

最佳答案

据我了解,只有在需要时才会分配空间。

尝试以下查询:

CREATE TABLE SizeTest (

    MyID int primary key
)

INSERT INTO SizeTest SELECT 1
UNION SELECT 2
UNION SELECT 3
UNION SELECT 4
UNION SELECT 5

EXEC sp_spaceused 'SizeTest'

ALTER TABLE SizeTest ADD MyBigText nvarchar(max)

EXEC sp_spaceused 'SizeTest'

UPDATE SizeTest SET MyBigText = 'This is big text' WHERE MyID = 1

EXEC sp_spaceused 'SizeTest'

DROP TABLE SizeTest

通过执行此语句,您应该为所有三个 sp_spaceused 调用获得以下结果:
name        rows      reserved  data  index_size unused
SizeTest    5           16 KB   8 KB        8 KB    0 KB

任何时候都没有分配 2GB。

关于sql-server - 什么时候分配空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12800539/

10-12 15:23