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