本文將告訴您,如何以估計 Microsoft SQL Server 2000 Windows CE 版資料庫或 Microsoft SQL Server 2005 Mobile Edition 資料庫的大小。不過,此估計值無法因為下, 面是可能的原因判斷真實的精確度:
- 系統資料表的大小可能會不同,尤其是當您使用 SQL Server CE 或 SQL Server 2005 Mobile 版的同步處理。
- 估計值不會不計算索引所採取的空間。
- 為了簡單起見,估計假設連續的列儲存體 (也就是您壓縮資料庫之後)。SQL Server CE 或 SQL Server 2005 Mobile 版將資料列儲存 4 KB 頁面上,它不會跨對於 文字 和 ntext 資料型別以外的網頁分割資料列。因為不永遠填滿所有網頁,一些未使用的空間會存在於個別的頁面上。而且,如果網頁有資料列,而且有些那些資料列刪除,空間,讓刪除的資料列不是回收直到壓縮資料庫。如果在網頁中的所有列被都刪除,頁面會稍後回收。
- 某些資料型別的長度可能會依據它們包含),包括 nvarchar 和 ntext 資料類型的資料而有所不同。當您估計的資料行大小時,估計根據最大的資料行大小的不是在資料行中儲存的資料的實際的大小。比方就說如果資料行有 nvarchar(50) 的資料型別,且值為"Hello",資料行的實際大小會 5 個位元組,但是估計的大小為 50 個位元組。
估計的資料表或資料庫的大小時, 請考慮下列資訊:
- 資料表中的每個資料列有 6 個位元組的造成負擔。
- 在資料表中的每一欄都有 1 個位元組加上 1 個位元組的資料列儲存每個 256 個位元組的造成負擔。
- 固定長度資料型別有的每個資料行的 1 個位元組的額外負荷,並且額外負荷進位到下一個較高的位元組。
- 零長度字串資料行資料列中佔用 1 個位元組。
- SQL Server CE 或 SQL Server 2005 Mobile 版會將資料儲存 Unicode 格式。如果用來建立資料庫的定序字串雙位元組字集 (DBCS) 語言 (如漢字) 的字串資料行的大小會增加一倍,因為每個位元組儲存為 2 個位元組。如果用來建立資料庫定序字串的單一位元組字集 (SBCS) 語言 (如英文),SQL Server CE 移除前置的未使用的位元組。為結果 SBCS 估計為每個字元的 1 個位元組的定序字串。
- 如果在合併複寫中使用 SQL Server CE 資料表] 或 [SQL Server 2005 Mobile 版資料表,有每個資料表的三個系統資料行。
- 如果 SQL Server CE 資料表或 SQL Server 2005 Mobile 版資料表參與遠端資料存取 (RDA) 有 2 的系統資料行的每個資料表。
下表說明在 SQL Server CE 和儲存大小為每個資料型別中的資料型別。
摺疊此表格展開此表格
| 資料型別 | 描述 |
|---|
| bigint | 整數 (完整數字) 資料從-2 ^63 (-9,223,372,036,854,775,808) 到 2 ^63-1 (9,223,372,036,854,775,807)。儲存大小是 8 個位元組。 |
| 整數 | 整數 (完整數字) 資料從-2 ^31 (-2,147,483,648) 到 2 ^31-1 (2,147,483,647)。 儲存大小是 4 個位元組。 |
| smallint | 從 –32 768 到 32,767 的整數資料。儲存大小是 2 個位元組。 |
| 微整數 | 整數資料是從 0 到 255 之間。儲存大小是 1 個位元組。 |
| 位元 | 整數資料是以 1 或 0 的值。 |
| 數字 (p,s) | 固定有效位數及小數位數數字 (Numeric) 資料是從-10 ^38 + 1 到 10 ^38? 1。p 指定精確度,,可以介於 1 和 38 之間變動。s 指定縮放和可能不盡相同介於 0 到 p.數字永遠使用不論其精確度及小數位數的 19 位元組。 |
| 金錢 | 貨幣資料值從-2 ^63 (-922,337,203,685,477.5808) 到 2 ^63-1 (922,337,203,685,477.5807),正確率-的千分之十貨幣單位。儲存大小是 8 個位元組。 |
| 浮點數 | 浮點數編號資料是從-1.79E + 308 到 1.79E + 308 存放區大小為 8 位元組。 |
| 真實 | 浮點有效位數的數字資料是從-3.40E + 38 到 3.40E + 38。 |
| 日期時間 | 日期與時間資料從 1753 年 1 月 1,年十二月 31 9999 精確度為一三位百分之一的一的第二個或 3.33 毫秒。 值會四捨五入到增量 000、.003 或.007 毫秒為單位)。儲存為兩個 4-位元組的整數。前 4 個位元組儲存在基底的日期 (1900 年 1 月 1,) 之前或之後的天數。基底的日期是在系統參考日期。 不允許的值的 日期時間 早於 1753 年 1 月 1。其它 4 個位元組將午夜後一天時間的儲存為毫秒數。秒有一個有效範圍是從 0 到 59。 |
| 國家 (地區) character(n)同義資料表: nchar(n) | 固定長度的 Unicode 資料最大長度為 255 個字元。預設長度為 1。儲存大小的以位元組為單位),是兩次輸入的字元數目。 |
| 國家 (地區) 的字元 varying(n)同義資料表: nvarchar(n) | (長度為 1 到 255 個字元的可變長度 Unicode 資料。預設長度為 1。儲存大小的以位元組為單位),是兩次輸入的字元數目。 |
| ntext | 可變長度 Unicode 資料的最大長度 (2 ^30-2) / 2 (536,870,911) 字元。儲存大小的以位元組為單位),是輸入的字元數兩倍。 |
| binary(n) | 固定長度二進位資料 510 位元組的最大長度。預設長度為 1。 |
| varbinary(n) | 最大長度是 510 位元組的可變長度二進位資料。預設長度為 1。 |
| 影像 | 變數長度的二進位資料,最大長度為 2 ^30 – 1 (1,073,741,823) 個位元組。 |
| uniqueidentifier | GUID。儲存大小是 16 個位元組。 |
| IDENTITY [(s, i)] | 這是資料行不是不同的資料類型的屬性。只有整數資料型別資料行可用於識別資料行。資料表可以有一個識別資料行。您可以指定種子與遞增值,且無法更新資料行。s (識別值種子) = 起始值 i (遞增) = 遞增值。 |
| ROWGUIDCOL | 這是資料行不是不同的資料類型的屬性。這是使用 uniqueidentifier 資料型別來定義的資料表中的資料行。一個資料表只能有一個 ROWGUIDCOL 資料行。 |
如果您使用的 SQL Server 2005 Mobile 版
關於資料型別,在 SQL Server 2005 Mobile 版中的詳細資訊,請參閱 < 資料型別 > 中 SQL Server 2005 線上叢書 》 的主題。
在下列情況中某個資料表的大小估計資料類型資料行]、 [資料列數目]、 [定序] 和 [同步處理類型而定。
案例 1
在這種情況下估計
myTableA1 資料表的大小。資料表有下列特性:
- myTableA1 資料表有 10,000 的資料列。
- myTableA1 資料表建立與預設英文定序,資料表並不會使用任何形式的 SQL Server CE 同步處理。
下表說明
myTableA1 表格中的每一欄的類型及每個資料行所佔的位元組數目。
摺疊此表格展開此表格
| 資料行 | 資料類型 | 大小 (以位元組為單位) | 高架位元組 |
|---|
| 1 | nvarchar | 25 | 1 |
| 2 | nchar | 25 | 1 |
| 3 | bigint | 8 | 1 |
| 4 | 日期時間 | 8 | 1 |
| N/A | 額外負荷 | N/A | 6 |
| 總計 | | 66 | 10 |
myTableA1 資料表中的每一資料列的總大小是 76 (66 + 10) 個位元組。因為資料表 10,000 列
myTableA1 資料表的總大小會是 760,000 位元組 (76 * 10,000)。 計算會考慮
nvarchar 資料型別的最大的大小,因為這是只估計資料表大小。資料表的實際大小可能會依據儲存
nvarchar 資料型別中的值而有所不同。
附註如果資料行中的資料值都應該大幅變化,您必須使用
nvarchar 資料型別來減少資料庫大小。
案例 2
在這種情況下估計
myTableA2 資料表的大小。資料表有下列特性:
- myTableA2 資料表有 91 列。
- 以預設英文定序,建立 myTableA2 資料表,而且資料表用於合併式複寫。
下表說明
myTableA2 表格中的每一欄的類型及每個資料行所佔的位元組數目。
摺疊此表格展開此表格
| 資料行 | 資料類型 | 大小 (以位元組為單位) | 高架位元組 |
|---|
| [客戶編號] | nvarchar | 5 | 1 |
| [供應商 | nvarchar | 40 | 1 |
| [連絡人] | nvarchar | 30 | 1 |
| 連絡人職稱 | nvarchar | 30 | 1 |
| 地址 | nvarchar | 60 | 1 |
| 縣/市 | nvarchar | 15 | 1 |
| 區域 | nvarchar | 15 | 1 |
| [郵遞區號] | nvarchar | 10 | 1 |
| 國家 (地區) | nvarchar | 15 | 1 |
| 電話 | nvarchar | 24 | 1 |
| 傳真 | nvarchar | 24 | 1 |
| N/A | 資料列負荷 | N/A | 6 |
| N/A | 對於大於 256 個位元組的 額外負荷 | N/A | 1 |
| N/A | 複寫的的 整數 | 4 | 1 |
| N/A | UniqueIdentifier 複寫 | 16 | 1 |
| N/A | 二進位 | 24 | 1 |
| 總計 | | 312 | 21 |
myTableA2 資料表的每個資料列的總大小是 333 (312 + 21) 個位元組。因為資料表 91 列
myTableA2 資料表的總大小會是 30,303 位元組。 因為字串資料行值的實際大小未知的此大小為只估計值。
案例 3
在這種情況下估計
myTableA3 資料表的大小。表參與 RDA,並具有下列特性:
- myTableA3 資料表有 91 列。
- myTableA3 資料表建立與預設英文定序,而 」 這個資料表主索引鍵資料行,因為它們作為其中一個的 RDA 追蹤系統資料行的一部份。
下表說明
myTableA3 表格中的每一欄的類型及每個資料行所佔的位元組數目。
摺疊此表格展開此表格
| 資料行 | 資料類型 | 大小 (以位元組為單位) | 高架位元組 |
|---|
| [客戶編號](PK) | nvarchar | 5 | 1 |
| [供應商(PK) | nvarchar | 40 | 1 |
| [連絡人] | nvarchar | 30 | 1 |
| 連絡人職稱 | nvarchar | 30 | 1 |
| 地址 | nvarchar | 60 | 1 |
| 縣/市 | nvarchar | 15 | 1 |
| 區域 | nvarchar | 15 | 1 |
| [郵遞區號] | nvarchar | 10 | 1 |
| 國家 (地區) | nvarchar | 15 | 1 |
| 電話 | nvarchar | 24 | 1 |
| 傳真 | nvarchar | 24 | 1 |
| N/A | 資料列負荷 | N/A | 6 |
| N/A | 對於大於 256 個位元組的 額外負荷 | N/A | 1 |
| N/A | RDA 的 整數 | 4 | 1 |
| N/A | 二進位 的 RDA 主索引鍵資料行中的每個資料行的 4 個位元組加上個位元組的資料行的值如果主索引鍵是已變更,否則 1 個位元組) | 53/1 | |
| 總計 | | 325/273 | 20 |
如果變更主索引鍵資料表的總大小會是 345 (325 + 20) 個位元組的每個資料列。因為
myTableA3 資料表 91 列大小會是資料表的 31,395 位元組。如果不會變更主索引鍵資料表的總大小是 293 (273 + 20) 個位元組的每個資料列。因為
myTableA3 資料表 91 列大小會是資料表的 26,663 位元組。因為字串資料行值的實際大小未知的這是一個估計值。