sql – 将新列添加到大数据库表

前端之家收集整理的这篇文章主要介绍了sql – 将新列添加到大数据库表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在数据库中的表中添加一个新的列.该表包含大约1.4亿行,我不知道如何在没有锁定数据库的情况下继续.

数据库正在生产中,这就是为什么这个数据库必须保持一致的流畅性.

我已经阅读了很多,但是如果这是一个危险的操作,从来没有真正得到答案.
新列为空,默认值为NULL.据了解,如果新列需要默认值,则会有更大的问题.

我真的很欣赏这个问题的一些直截了当的答案.这是否可行?

解决方法

是的,这是非常可行的.

添加一个列,其中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.

第二个警告:

测试它

第三和最后的警告:

不,真的,测试.

猜你在找的MsSQL相关文章