create table dw_0427 as select * from dba_objects;
insert into DW_0427 select * from dw_0427;
exec dbms_stats.gather_table_stats(ownname => 'SCOTT',tabname => 'DW_0427',estimate_percent=>100,CASCADE => TRUE,no_invalidate => FALSE);
select * from dba_tab_statistics where table_name='DW_0427'
---方法1
--预估表大小,正确的行数及平均行长,方法简单方便
select 2303360*97*(1+0.22)/1024/1024 from dual; ---259
select bytes/1024/1024 from dba_segments where segment_name='DW_0427'; ---261表占用的段大小
---方法2,存储过程中的值的含义:表空间,平均行长,行数,pct free
SQL> variable used_bytes number; --使用的字节数
SQL> variable alloc_bytes number; --分配的字节数
SQL> exec DBMS_SPACE.CREATE_TABLE_COST('USERS',103,2303360,10,:used_bytes,:alloc_bytes);
used_bytes
---------
277487616 ---264
alloc_bytes
---------
285212672 ---272
--方法3根据字段信息如长度类型及表的行数来估算表大小,此处略可参考下面的网页1
以上三中方法建议使用第一种
----索引预估方法1
预估索引大小:
SQL> variable used_bytes number; --使用的字节数
SQL> variable alloc_bytes number; --分配的字节数
SQL> exec DBMS_SPACE.CREATE_INDEX_COST('create index idx_123 on dw_0427 (id)',:used_bytes,:alloc_bytes);
PL/SQL procedure successfully completed
used_bytes
---------
29943680
alloc_bytes
---------
60817408
print :used_bytes
print :alloc_bytes
---索引预估方法2
explain plan for create index idx_11111 on dw_0427 (id) tablespace users;
select * from table(dbms_xplan.display());
---以下方法未有执行结果
declare
l_index_ddl varchar2(1000);
l_used_bytes number;
l_allocated_bytes number;
begin
dbms_space.create_index_cost(ddl => 'create index idx_11111 on dw_0427 (id) tablespace users',used_bytes => l_used_bytes,alloc_bytes => l_allocated_bytes);
dbms_output.put_line('used= '|| l_used_bytes);
end;
/
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




