我需要添加一列,使得所有现有行的值为 1,所有新行的值默认为 0
很简单,我已经创建了一个脚本
ALTER TABLE Table ADD Column1 BIT NOT NULL DEFAULT 0
GO
UPDATE Table SET Column = 1
GO
在 400K 行数据集上更新查询需要 10 多分钟。这里的开销在哪里?
我怀疑我可以添加列,使默认值为 1,然后在不到 10 秒的计算时间内将默认值更改为 0(并且可能会更改脚本以在下一个测试阶段这样做)。
我需要添加一列,使得所有现有行的值为 1,所有新行的值默认为 0
很简单,我已经创建了一个脚本
ALTER TABLE Table ADD Column1 BIT NOT NULL DEFAULT 0
GO
UPDATE Table SET Column = 1
GO
在 400K 行数据集上更新查询需要 10 多分钟。这里的开销在哪里?
我怀疑我可以添加列,使默认值为 1,然后在不到 10 秒的计算时间内将默认值更改为 0(并且可能会更改脚本以在下一个测试阶段这样做)。
首先,"Print"
在语句之间使用并放置两个时间戳来检查哪个有开销。为了解决一个问题,你应该首先知道导致它的根源。正如我的经验所说,它正在添加需要很长时间才能完成的列。
其次,如果表中存储了大约 40 万条记录,那么添加新列当然会带来巨大的 IO 成本。因此,如果您让我知道您的需求,我会想到一个更好的解决方案。添加和删除列,更改表等在蓝月亮中发生一次,您不应该像通常的操作那样做这样的事情。这根本不正确。
毕竟,我知道您想添加一列并在 10 秒内更新值,但这取决于许多其他事情,而您的代码(因为它很简单)就是其中之一。所以我认为你应该更多地考虑这个想法而不是你的代码。
希望能帮助到你。
干杯