sql - Azure SQL DB - 添加了对 NVARCHAR 列的大小限制,并且数据库的大小变得臃肿。为什么会发生这种情况?

标签 sql database azure azure-data-studio

我有一个 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/

相关文章:

sql - 如何在 SQL Server 中创建数据集并处理每条记录?

mysql - SQL - 如何在多个表上使用更多 COUNT?

android - android studio中的数据库

asp.net - 更改 Azure 网站的负载平衡服务器?

azure - 为什么当我按 F5 时,会从 Azure 项目中的 Visual Studio 打开两个资源管理器窗口

sql - 查找类别交集的最新条目

sql - 通过oozie运行查询(无脚本)

sql - 二维数据库

iphone - 我应该开始使用核心数据吗?

azure - Nservicebus 4 与 azure 和 RavenDB