Home >Database >Mysql Tutorial >Oracle 创建索引前估算索引大小(dbms_space.create_index_cost)

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 16:46:491199browse

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

Oracle 创建索引前估算索引大小

在一个表的某个字段创建索引前估算其大小,最好的办法就是在测试库创建索引做预测。如果没有测试环境还可以使用dbms_space.create_index_cost来估算其大小。

语法:

DBMS_SPACE.CREATE_INDEX_COST (
  ddl            IN    VARCHAR2,
  used_bytes      OUT  NUMBER,
  alloc_bytes    OUT  NUMBER,
  plan_table      IN    VARCHAR2 DEFAULT NULL);

示例:

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

表已创建。

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

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn