我们正在使用SQL Server 2008.我们有一个现有数据库,ADD
需要新COLUMN
Table
其中一个 2700行{} strong>只有一个列的类型为VARCHAR(8000)
。当我尝试使用CHAR(1) NULL
表命令添加新列(ALTER
)时,需要花费太多时间!花了 5分钟,命令仍在运行,我停止了命令。
下面是命令,我试图添加新列:
ALTER TABLE myTable Add ColumnName CHAR(1) NULL
修改:
答案 0 :(得分:3)
更改表需要架构锁定。许多其他操作也需要相同的锁。毕竟,在select
语句的中途添加一列是没有意义的。
所以可能的解释是,一个进程将表锁定了5分钟。然后ALTER
必须等到它自己获得锁定。
您可以从SQL Server Management Studio中的活动监视器中看到阻止的进程和阻止进程。
答案 1 :(得分:1)
嗯,要记住的一件事是你在表中添加了一个新的固定长度列。在存储中构造行的方式,对于每一行,所有固定长度列都放在所有可变长度列之前。因此,必须在存储中更新每一行才能进行此更改。
反过来,如果这导致每页上可以存储的行数发生变化,则可能需要进行大量的新分配。
话虽如此,对于所显示的行数,我不会花费5分钟 - 除非,正如Andomar指出的那样,还涉及一些锁定争用。