如果我将一列声明为 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/