從而得到該表可能占據(jù)的存儲(chǔ)空間為169*db_block_size.
對(duì)索引空間的估算
一。數(shù)據(jù)塊頭的大小
block header size = fixed header + variable transaction header
其中:
fixed header = 113 bytes
variable transaction header = 23*i (i=INITRANS)
假定INITRANS=2,
block header size = 113 + (23 * 2) bytes
= 159 bytes
二。數(shù)據(jù)塊中可供INDEX使用的空間為:
available data space = (block size - block header size) -
((block size - block header size) * (PCTFREE/100))
假定PCTFREE=10,DB_BLOCK_SIZE=2K
available data space = (2048 bytes - 159 bytes) -
((2048 bytes - 159 bytes) * (10/100))
= 1889 bytes - 188.9 bytes
= 1700.1 bytes
三。INDEX entry的長(zhǎng)度
與表的計(jì)算方法類似,估算出被索引的列的平均長(zhǎng)度之和,利用下面公式得到每一條INDEX ENTRY的長(zhǎng)度。
bytes per entry = entry header + ROWID length + F + V + D
其中:
entry header = 1 byte
ROWID length = 6 bytes
F = 列長(zhǎng)的總和(1 byte表示長(zhǎng)度的列,CHAR, NUMBER, DATE, and ROWID types)
V = 列長(zhǎng)的總和(3 bytes表示長(zhǎng)度的列,CHAR, RAW datatypes)
D = 被索引列長(zhǎng)之和 (from above)
如果我們?cè)赥EST表上建立了在A,B,C三列上的一個(gè)索引,則D=22,于是
bytes per entry = 1 + 6 + (3 * 1) + (3 * 0) + 22 bytes
= 32 bytes
四。于是,該索引所需要的數(shù)據(jù)塊數(shù)量為:
number of blocks
for index = 1.1 * ((number of not null rows * avg. entry size) /
((floor (avail. data space / avg. entry size)) *
(avg. entry size))
注:這里帶入了系數(shù)1.1主要考慮到INDEX的建立需要分支(BRANCH ENTRY BLOCKS)
number of blocks
for index = 1.1 * ((10000 * 32 bytes) / ((floor (1700/32 bytes)) *
(32 bytes))
= 208 blocks
從而得到該表可能占據(jù)的存儲(chǔ)空間為208*db_block_size.
方法二:
利用ANALYZE進(jìn)行空間估算
如果可以建立一個(gè)模擬環(huán)境(模擬數(shù)據(jù)或者實(shí)際數(shù)據(jù)),也可以利用ANALYZE命令來(lái)進(jìn)行空間估算。
具體方法為:
一。ANALYZE TABLE testtable COMPUTE STATISTICS
在DBA_TABLES中有下面的列
=========================================
AVG_SPACE 表中平均剩余空間
AVG_ROW_LEN 平均一條記錄的長(zhǎng)度
OWNER 表的所有者
TABLE_NAME 表名
NUM_ROWS 表中記錄數(shù)
=========================================
則:
表的大小(估計(jì)值) = DB_BLOCK_SIZE* ceil(實(shí)際表中記錄數(shù)/floor((DB_BLOCK_SIZE-AVG_SPACE)/AVG_ROW_LEN))
二。ANALYZE INDEX testindex COMPUTE STATISTICS
在DBA_INDEXES中有下面的列
=========================================
OWNER 索引的所有者
INDEX_NAME 索引名
TABLE_OWNER 索引的基表所有者
TABLE_NAME 索引的基表
LEAF_BLOCKS 索引中葉子塊數(shù)
BLEVEL B-Tree level: B-tree的深度,
如果為0表示根與葉子在同一個(gè)LEVEL上.
=========================================
則:
索引的大小(估計(jì)值) = LEAF_BLOCKS*ceil(實(shí)際表中記錄數(shù)/NUM_ROWS);
如果BLEVEL <> 0,還需要考慮再加上一個(gè)系數(shù),用來(lái)包含用作分支(BRANCH)塊的空間。
此外,在INDEX_STATS視圖中包含了更詳細(xì)的有關(guān)索引空間及結(jié)構(gòu)上的分配情況,這需要事先進(jìn)行
ANALYZE INDEX testindex VALIDATE STRUCTURE的動(dòng)作。有興趣可以詳細(xì)參見(jiàn)該視圖的定義。
聯(lián)系客服