SQLServer如何处理Alter Table命令?

时间:2013-01-07 13:12:34

标签: sql sql-server-2008 alter-table

我们正在使用SQL Server 2008.我们有一个现有数据库,ADD需要新COLUMN Table其中一个 2700行只有一个列的类型为VARCHAR(8000)。当我尝试使用CHAR(1) NULL表命令添加新列(ALTER)时,需要花费太多时间!花了 5分钟,命令仍在运行,我停止了命令。 下面是命令,我试图添加新列:

ALTER TABLE myTable Add ColumnName CHAR(1) NULL
  1. 有人可以帮我理解SQL Server的处理方式 ALTER表命令?究竟会发生什么?
  2. 为什么需要这么多时间来添加新列
  3. 修改

    1. 表格大小 ALTER命令的影响是什么?

2 个答案:

答案 0 :(得分:3)

更改表需要架构锁定。许多其他操作也需要相同的锁。毕竟,在select语句的中途添加一列是没有意义的。

所以可能的解释是,一个进程将表锁定了5分钟。然后ALTER必须等到它自己获得锁定。

您可以从SQL Server Management Studio中的活动监视器中看到阻止的进程和阻止进程。

答案 1 :(得分:1)

嗯,要记住的一件事是你在表中添加了一个新的固定长度列。在存储中构造行的方式,对于每一行,所有固定长度列都放在所有可变长度列之前。因此,必须在存储中更新每一行才能进行此更改。

反过来,如果这导致每页上可以存储的行数发生变化,则可能需要进行大量的新分配。

话虽如此,对于所显示的行数,我不会花费5分钟 - 除非,正如Andomar指出的那样,还涉及一些锁定争用。