Heim >Datenbank >MySQL-Tutorial >Oracle 创建索引前估算索引大小(dbms_space.create_index_cost)

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 16:46:491198Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn