我需要更新一个大小约为 18GB 的 SQL Server 数据库,以将大量TEXT
列更改为NVARCHAR(MAX)
.
我遇到的问题是在执行完所有alter table
命令后,数据库的大小最终接近 26GB。我知道从这里开始使用NVARCHAR(MAX)
将使数据库增长得更慢,但有什么办法可以防止这种膨胀?
我希望这篇文章会对你有所帮助。
http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx
关键事实:
当您将列从 TEXT/NTEXT 更改为 NVARCHAR(MAX) 时,数据的存储方式不会改变,它只会更新表元数据。仅在下次更改值时才会更改数据结构。这可以通过运行这样的东西立即完成:
update mytable set mycolumn1 = mycolumn1
Run Code Online (Sandbox Code Playgroud)如果您使用 NVARCHAR(MAX) 的默认表选项设置,则表中的数据将更大。
- 在将设置更改为适合您的需要之前,您需要查看您的表选项设置和环境。
如果您遵循带有更新表语句的更改表语句,您的表大小最终会缩小。
简而言之,如果您运行 update 语句,强制更改数据结构的存储,您的数据库大小会更小,正如预期的那样。
编辑:正如您所提到的 TEXT 而不是 NTEXT,您在空间上的收益可能没有您想象的那么明显。NTEXT 占用的空间量是 TEXT 占用的空间量的两倍,但同时,您应该期望 NVARCHAR(MAX) 占用的空间量是 NTEXT 占用的空间的一半左右。根据我的计算,您将看到与原始数据库大小相比几乎没有变化。
可能是您的问题的疏忽,但您说的是 TEXT 到 NVARCHAR(max) 而不是 NTEXT 到 NVARCHAR(max)。如果这是您真正在做的事情,那么您正在从 ANSI 更改为 UNICODE,您应该不会对它占用更多空间(单字节字符与多字节字符)感到惊讶。
归档时间: |
|
查看次数: |
11096 次 |
最近记录: |