我必须根据下表的块计算存储要求:
Bill(billno number(7),billdate date,ccode varchar2(20),amount number(9,2))
表存储属性为:
PCTFREE=20,INITRANS=4,PCTUSED=60,BLOCKSIZE=8K,行数=100000
我在互联网上搜索了很多,参考了很多书,但没有得到任何东西。
我必须根据下表的块计算存储要求:
Bill(billno number(7),billdate date,ccode varchar2(20),amount number(9,2))
表存储属性为:
PCTFREE=20,INITRANS=4,PCTUSED=60,BLOCKSIZE=8K,行数=100000
我在互联网上搜索了很多,参考了很多书,但没有得到任何东西。
首先,您需要弄清楚varchar2
列的典型值是什么。总大小将取决于此。我从你的桌子上创建了 2 张BILL
桌子。BILLMAX
whereccode
总是需要 20 Char('12345678901234567890')
并且BILLMIN
总是NULL
在ccode
. 结果是:
TABLE_NAME NUM_ROWS AVG_ROW_LEN BLOCKS
BILLMAX 3938 37 28
BILLMIN 3938 16 13
select table_name, num_rows, avg_row_len, blocks from user_tables
where table_name in ( 'BILLMIN', 'BILLMAX')
如您所见,块的数量取决于此。用于exec dbms_stats.GATHER_TABLE_STATS('YourSchema','BILL')
刷新 user_tables 中的值。
您需要考虑的另一件事是您的范围有多大。例如 :
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
将生成 8 个块大小的前 16 个扩展区。之后,它将开始创建大小为 1 MB(128 个块)的范围。
因此,BILLMAX
它将生成 768 个块BILLMIN
并将占用 384 个块。如您所见,差异很大。
对于BILLMAX
:16 * 8 + 128 * 5 = 768
对于BILLMIN
:16 * 8 + 128 * 2 = 384