2017-10-19 73 views
-1

是否有可能獲得特定表使用的磁盤空間量?假設我有一百萬個用戶存儲在我的表中,我想知道存儲所有用戶和/或其中一個用戶需要多少空間。如何找出SQL Server表使用多少空間?

更新

我打算使用Redis的從一個特定的表緩存中的某些字段內存後快速檢索所需要的數據。所以我需要計算它需要多少空間,因此它是否適合記憶。當然,這取決於我在表格中使用的數據類型,但是如果一個表格包含幾十個字段,則需要花費太多時間來逐一計算。

雖然MySQL不適用於SQL Server,但MySQL的確有這樣的答案:How can you determine how much disk space a particular MySQL table is taking up?您可以查看它以瞭解我的意思。

+2

它取決於您用來存儲它們的數據類型。 –

+0

你不能輕易做到這一點。您可以計算每列所需的最小大小並對它們進行求和以找出基本數據的存儲需求,但除了與列相關的索引佔用的空間之外,還會爲每個列和行添加額外的開銷,與數據庫本身相關的開銷,可能被視爲該表的大小的一部分,以及其他因素。反正有什麼不同呢?您的關注點應該是整個數據庫的大小,而不是單個表或行。 –

+1

如果您擁有SSMS,則可以右鍵單擊對象資源管理器中的表格,轉到屬性,然後查看存儲頁面。數據空間字段是該表中數據的大小,但可能不包括表中的部分開銷成本。 – zambonee

回答

1

如果您有SSMS,您可以在對象資源管理器中右鍵單擊該表,然後轉到屬性,然後查看存儲頁面。數據空間字段是該表中數據的大小,但可能不包括表中的部分開銷成本。

0

號這是一個真正的擴展評論,因爲它不直接回答這個問題。

對於大多數用途,您只需使用列的大小,將它們相加,然後乘以行數。這個估計很低,但這是合理的。並且(取決於你如何處理這些類型)可能是導出數據的合理估計。

也就是說,表的存儲是一件困難的事情。以下是您需要考慮的一些因素:

  • 單個字段的大小。由於某些類型具有不同的大小,因此這會變得稍微困難​​一些,因此這些數據完全取決於數據。
  • 表格佔用的頁面數量(或者等同於每個數據頁面的完整程度)。請注意,這可能會有所不同,具體取決於每個表格的完整程度。
  • 「溢出」數據類型佔用的頁數,如varchar(max)
  • 數據頁面是否被壓縮或加密。
  • 該表的索引。
  • 每個索引頁面有多滿。

而且,毫無疑問,我遺漏了一堆其他相關的內部細節(here是一個開始頁面佈局的地方)。

換句話說,沒有一個簡單的答案。兩個不同系統上的等效表可能會佔用非常不同的空間。同一個系統在不同時間的「相同」表格也是如此。

使用數據庫時的一般答案是,您需要比行數*行大小更多的空間 - 我似乎記得在某個時間點使用3因子。一般來說,存儲相當便宜,所以這不是使用數據庫的限制因素。

相關問題