[英]How the Alter Table command is handled by SQLServer?
我们使用SQL Server 2008中,我们有一个现有的数据库,并要求它ADD
了新的COLUMN
到一个Table
它只有2700行 ,但其列的一个类型是VARCHAR(8000)
当我尝试使用ALTER
table命令添加新列( CHAR(1) NULL
)时,它花费了太多时间! 花了5分钟 ,命令仍然在运行,我停止了命令。 下面是命令,我试图添加新列:
ALTER TABLE myTable Add ColumnName CHAR(1) NULL
编辑 :
更改表需要模式锁。 许多其他操作也需要相同的锁。 毕竟,在select
语句的中间添加一列是没有意义的。
因此,一个可能的解释是一个进程将表锁定了5分钟。 然后, ALTER
必须等到它自己获得锁为止。
您可以从SQL Server Management Studio中的“活动监视器”查看被阻止的进程以及被阻止的进程。
好吧,要记住的一件事是您正在向表中添加新的固定长度列。 在存储中行的结构方式中,对于每行,所有固定长度的列都位于所有可变长度的列之前。 因此,必须对存储中的每一行进行更新才能进行此更改。
如果这进而导致可以存储在每个页面上的行数发生更改,则可能需要大量新分配。
话虽如此,对于所示的行数,我将不必花5分钟的时间-除非像Andomar指出的那样,还涉及一些锁争用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.