用于添加列的SQL Alter表,它是否可以做任何"吓人"的事情?

Jam*_*ght 2 sql t-sql

我需要在我的live sql数据库中的现有表中添加一列.我知道如何使用ALTER命令,但我想知道的是它对表的影响.

例如,如果使用SQL Management Studio,它声称添加列将"删除并重新创建"表.

ALTER表命令也会这样做吗?

这个表是常量访问的,非常重要,所以我想在此之前确定这一点.

Fra*_*čik 7

不,ALTER TABLE x ADD y不会重新创建表,它只会添加列.你可以遇到的唯一问题是列应该是NOT NULL.在这种情况下,除非您指定默认值(如果该表中已存在行),否则该命令将以错误结束.这是因为它需要知道要填充到现有行的内容.


Phi*_*ley 5

通过"不断访问",您的意思是"我没有任何停机时间或维护窗口可以对数据库进行重大更改"?如果是这样,就是可怕的部分.就像每个人都说的那样,这个更新需要对表进行独占锁定,如果必须等待锁定,那么你可能会遇到阻塞,超时和可能的愤怒用户.

此外,新列可能需要更新表.我不是100%清楚这里发生了什么,但如果(这是一个"假设"的例子,但它可能发生)你将char(100)列添加到刚刚拥有其聚集索引的10,000行表使用fillfactor = 0重建,然后每行向已经填满的页面添加100个字节,该数据在哪里?您可以获得页面拆分或转发记录,这两个记录都需要花费时间来构建SQL - 这意味着需要长块以及访问表的请求的进一步延迟.

说真的,试着找到停机时间,或者至少是低容量时间(周日凌晨2点?)来做这样的工作.如果可以的话,测试一下......但很少有地方有测试网站模仿繁忙的生产网站.如果没有别的,对数据库副本的测试将大致显示需要多长时间,如果您可以获得停机时间窗口.