2012-06-12 45 views
4

我們有一個表T,其中包含若干char(8)列(隱式),在某些情況下需要將其更改爲char(64)之類的內容。在SQL Server中將char(8)更改爲char(32)

我們不想浪費空間,所以這裏是一個問題: 從RDBMS計算的角度(擴展列數據類型)是否是一個昂貴的操作?我們希望在理論上回答這個問題,沒有基準。數據庫是否需要重新排列表格的物理佈局?

回答

4

是,相當昂貴 - 該表中每一行必須被觸及,修改,再存儲,以及所有使用任何這些列的非聚集索引將需要重建。

由於它是CHAR(x),它是固定寬度的 - 所以改變它的大小會導致每一列都不得不被修改。另外:隨着從8到64個字符的變化,有可能有些頁面不能再保存所有的行,並且頁面拆分將會發生所有的開銷。

+0

謝謝,我們已經假設了這一點。 – Cartesius00

2

如果增加char數據類型的長度,那麼將需要數據頁拆分,並且就CPU利用率,內存優化和數據壓縮而言,這將是昂貴的。