sql – 将新列添加到大数据库表
我需要在数据库中的表中添加一个新的列.该表包含大约1.4亿行,我不知道如何在没有锁定数据库的情况下继续.
数据库正在生产中,这就是为什么这个数据库必须保持一致的流畅性. 我已经阅读了很多,但是如果这是一个危险的操作,从来没有真正得到答案. 我真的很欣赏这个问题的一些直截了当的答案.这是否可行? 解决方法是的,这是非常可行的.添加一个列,其中NULL是可接受的并且没有默认值,不需要长时间运行的锁来将数据添加到表中. 如果您提供默认值,则SQL Server必须去更新每个记录才能将该列新值写入该行. 一般工作原理: +---------------------+------------------------+-----------------------+ | Column is Nullable? | Default Value Supplied | Result | +---------------------+------------------------+-----------------------+ | Yes | No | Quick Add (caveat) | | Yes | Yes | Long running lock | | No | No | Error | | No | Yes | Long running lock | +---------------------+------------------------+-----------------------+ 警告位: 我不记得在我的头顶部,当您添加一列导致使空值位图的大小被扩展时会发生什么.我想说,NULL位图表示当前行中所有列的可空性,但我不能把我的手放在我的心上,并且说这绝对是真的. 编辑 – > @MartinSmith指出,NULL位图只会在行发生变化时展开,非常感谢.但是,正如他还指出,如果行的大小扩展到SQL Server 2012的8060字节限制,那么a long running lock may still be required.非常感谢* 2. 第二个警告: 测试它 第三和最后的警告: 不,真的,测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |