oracle索引大小暴增_Oracle创建索引前估算索引大小(dbms_space.create_index_cost)

Oracle创建索引前估算索引大小(dbms_space.create_index_cost)

在一个表的某个字段创建索引前估算其大小,最好的办法就是在测试库创建索引做预测。

如果没有测试环境还可以使用dbms_space.create_index_cost来估算其大小。

语法:  www.2cto.com

DBMS_SPACE.CREATE_INDEX_COST (

ddl             IN    VARCHAR2,

used_bytes      OUT   NUMBER,

alloc_bytes     OUT   NUMBER,

plan_table      IN    VARCHAR2 DEFAULT NULL);

示例:

[sql]

SQL> create table xyc_test (id int,name varchar(32));

表已创建。    www.2cto.com

SQL> begin

2  for i in 1..100000 loop

3  insert into xyc_test values(i,'向银春');

4  end loop;

5  commit;

6  end;

7  /

PL/SQL 过程已成功完成。

SQL> exec dbms_stats.gather_table_stats(user,'XYC_TEST');

PL/SQL 过程已成功完成。

SQL> variable used_bytes number;

SQL> variable alloc_bytes number;

SQL> exec DBMS_SPACE.CREATE_INDEX_COST('create index x_idx on xyc_test(id)',:used_bytes,:alloc_bytes);

PL/SQL 过程已成功完成。

SQL> print :used_bytes

500000

----估算分配大小

SQL> print :alloc_bytes

3145728

SQL> create index x_idx on xyc_test(id);

索引已创建。

----实际分配大小,这里感觉和估算的相差较大,可能和数据量有关

SQL> select bytes from user_segments where segment_name='X_IDX';

2097152

或使用下面的方法更方便

[sql]

SQL> declare

2  v_ddl varchar(1024);

3  v_used_bytes number;

4  v_alloc_bytes number;

5  begin

6  dbms_space.create_index_cost(

7  ddl =>' create index x_idx on xyc_test(id) ',used_bytes=>v_used_bytes,alloc_bytes =>v_alloc_bytes);

8  dbms_output.put_line('used_bytes='||v_used_bytes||' bytes'||' alloc_bytes='|| v_alloc_bytes || ' bytes');

9  end;

10  /

used_bytes=500000 bytes alloc_bytes=3145728 bytes

PL/SQL 过程已成功完成。

http://www.dengb.com/oracle/482409.htmlwww.dengb.comtruehttp://www.dengb.com/oracle/482409.htmlTechArticleOracle创建索引前估算索引大小(dbms_space.create_index_cost) 在一个表的某个字段创建索引前估算其大小,最好的办法就是在测试库创建索引做...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值