表空間計算方法


數據類型 大小

char/binary 在定義中指定的大小

varchar/varbinary 實際的數據大小,使用一個平均估計值

int 4字節

smallint 2字節

tinyint 1字節

float 8字節

float(b) 4字節(精確到一至七位小數的數字)

float(c) 8字節(精確到八至十五位小數的數字)

double precision 8字節

real 4字節

money 8字節

small money 4字節

datetime 8字節

smalldatetime 4字節

bit 1字節

decimal/numeric 根據精度,2-17字節

text/image 每個錶行16字節,每個not null列至少加上2KB的頁

timestamp 8字節

允許NULL的列定義爲var數據類型

數值精度 大小

0-9 5字節

10-19 9字節

20-28 13字節

29-38 17字節

1.帶簇索引表的計算方法

數據長度計算方法:

.不含可變長度字段的行大小=2+(以字節計算的列的大小的合計值)

.含可變長度字段的行大小=2+(以字節計算的固定長度列的大小的合計值)+(可變長度列的平均大小的合計值)+(可變長度列的個數+1)+2

.一頁中的行數=8060/(行的大小)(只舍不入)

.8KB數據頁的數目=(需要的行數)/(每頁的行數)(只入不捨)

簇索引長度方法:

.不含可變長度字段的行大小=5+(以字節計算的列的大小的合計值)

.含可變長度字段的行大小=5+(以字節計算的固定長度列的大小的合計值)+(可變長度列的平均大小的合計值)+(可變長度列的個數+1)+2

.一頁中的行數=8060/(行的大小)-2

.在N級上的索引頁數=(數據頁數)/(一頁中簇索引行數)(只入不捨)

例:有一個表,有一個int型簇索引,估計5,000,000行所需的空間,假定還有四個23字節長的var類型列,且列的平均長度爲定義長度的60%。

2+4+(92*60%)+(4+1)+2=63

8060/63=127

5000000/127=39371

5+4=9

8060/9-2=894

39371/894=45

45/894=1

數據庫表所需的8KB頁的總數:

data page:39371

index page(level 1):1

index page(level 0):45

total number of 8KB pages:39417(or about 308MB)

2.帶非簇索引表的計算方法

.索引行大小=7+(固定長度關鍵字的長度的合計值)

.葉子索引行大小=9+(固定長度關鍵字的長度的合計值)+(可變長度關鍵字的長度的合計值)+(可變長度關鍵字的個數)+1

.每頁的葉子行數=8060/(葉子索引行大小)(只舍不入)

.葉子頁數=(表中的行數)/(每頁的葉子行數)(只入不捨)

.非葉子行大小=葉子索引行大小+4

.每頁的非葉子索引行數=8060/(非葉子行大小)-2

.在N級上的索引頁數=(葉子頁數)/(每頁的非葉子索引行數)(只入不捨)

例:有一個表,有一個六字節長的非簇索引,估計5,000,000行所需的空間。

7+6=13

8060/13=620

5000000/620=8065

13+4=17

8060/17-2=473

8065/473=18

18/473=1

數據表所需的8KB頁的總數:

leaf page:8065

leaf index page(level 1):1

leaf index page(level 0):18

total number of 8KB pages:8084 or about 64MB
發佈了8 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章