數據類型 大小
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