Jon*_*ski 9 sql-server-2008 database-design
我需要在包含数百万行的表中将一列从 NOT NULL 更改为 NULL。我试过一个简单的
alter table Table1 ALTER COLUMN Column1 XML NULL
Run Code Online (Sandbox Code Playgroud)
但它需要永远。所以这里是我的问题:
是否会更快:
Column1
INSERT INTO <NewTable> SELECT * FROM <OriginalTable>
;这里的优点是您在操作期间不会对原始表持有锁。该表应该只在重命名阶段被锁定。(它假定 SQL Server 支持对象级重命名。)
1)人们需要有关表+非聚集索引的完整结构的更多信息,才能正确地弄清楚发生了什么,但我怀疑与 NULL 位图有关。
请参阅有关该主题的更多详细信息。 http://www.sqlskills.com/BLOGS/PAUL/post/Misconceptions-around-null-bitmap-size.aspx
2) 是的,只要您有存储空间,创建一个具有正确可空性的新表,并分批传输数据以避免日志过度增长,并使用下面列出的技术切换表。我已经这样做过好几次了,几乎没有停机时间。
http://jahaines.blogspot.com/2009/12/sql-server-2005-how-to-move-10-millions.html