我有一个 Azure SQL DB 表,其中包含大约 70 万条记录和 9 列。其中大部分列最初设置为 NVARCHAR(max)
然后我决定应用 SQL 脚本来限制列大小,因为我认为这应该可以优化性能。我在 Azure Data Studio
(我在 Mac 上)内针对每一列运行了以下查询:
ALTER TABLE [MyTable] ALTER COLUMN [ColumnInQuestion1] nvarchar(500) NULL;
ALTER TABLE [MyTable] ALTER COLUMN [ColumnInQuestion2] nvarchar(500) NULL;
etc etc...
此查询大约需要 20 分钟才能完成。然而,在查看我的数据库后,我注意到 Azure 中的数据库大小增加了近 30% - 从大约 1.5GB 增加到略高于 1.9GB。
为什么会发生这种情况? Azure/Data Studio 是否在查询执行期间为表运行某种备份,并且之后不会删除该备份,或者限制列长度确实会增加数据库大小吗?
最佳答案
列大小从“MAX”更改为“500”改变了 SQL 在表行中分配数据的方式。使用“MAX”列处理行的方式可能会留下页面(数据的逻辑 block )。
重建其中包含已更改列的任何索引。
在表上运行 DBCC CLEANTABLE 命令。 https://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-cleantable-transact-sql?view=sql-server-ver16
关于sql - Azure SQL DB - 添加了对 NVARCHAR 列的大小限制,并且数据库的大小变得臃肿。为什么会发生这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72824844/