我有一个包含数百万行的表和一个允许NULL值的列。但是,当前没有任何行具有该列的NULL值(我可以通过查询很快地验证这一点)。但是当我执行命令时
ALTER TABLE MyTable ALTER COLUMN MyColumn BIGINT NOT NULL;
相对而言,查询将永远花费。实际上,它需要10到20分钟,是添加检查约束的两倍多。有没有一种方法可以立即更新该列的表元数据,特别是因为我知道该列没有行具有NULL值?
2
否(或至少不使用文档/受支持的方法)。请参阅为什么将ALTER COLUMN设置为NOT NULL会导致大量日志文件增长?
—
马丁·史密斯
Sch-M
当它花费“永远”时,它也可能正在等待锁。您是否看过它是在等待还是忙?
@MartinSmith我永远澄清了我的意思。我正在开发环境中对此进行测试,没有其他会话影响数据库。最终确实完成了。但是您链接的答案说明了为什么要花这么长时间。如果您可以将您的评论改写为答案,那么我会接受的。
—
约瑟夫·戴格尔,2013年