Sql-Server

為什麼 varchar(255) 列的表比使用正確數據類型的相同表佔用的空間更少

  • August 10, 2016

我有兩個相同的表並保存相同的數據行。

一個為表格的每一列使用 varchar(255),另一個為每一列正確鍵入(使用日期、整數、小數等)。

使用 Management Studio 的屬性視窗,我可以看到將所有數據儲存為 varchar 的表要小得多,這不是我期望看到的。我的理解是,int 只會使用 4 個字節的空間,因此使用的空間比儲存為 varchar 的 int 少得多。

我應該尋找什麼來了解這裡發生了什麼?兩個表在 int 列上都有一個主鍵,沒有其他索引。出於測試目的,它們已填充來自同一源查詢的相同數據集。

所以這是因為我儲存的數據的形狀,在這種情況下,varchar 真正佔用的空間更少。

表中的許多列都是 int 和 numeric(38,12) (這非常大,因為數據源使用這種類型)。但是,這些列中的許多值是 0 或整數。因此,varchar(255) 會將此值儲存為 3 個字節(1 個字節,加上 2 個成本),而 int 將使用 4,而 numeric 將使用 17。這導致使用正確的類型以減少儲存空間在整個桌子上高效。

為了減少使用的儲存空間,我需要檢查是否可以更改類型(從 int 到 smallint 或 numeric(32,12) 到 numeric (19,8) 等),或者看起來稀疏列將是預期有很多 0 或 null 的好解決方案。

引用自:https://dba.stackexchange.com/questions/146401