[英]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.