Oracle kan estimere indeksoprettelsestid og indeksstørrelse med EXPLAIN PLAN
kommando:
Eksempelskema
--Create a table with 1 million rows.
drop table table1;
create table table1(a number);
insert into table1 select level from dual connect by level <= 1000000;
--Gather statistics.
begin
dbms_stats.gather_table_stats(user, 'table1');
end;
/
--Estimate index creation and size.
explain plan for create index table1_idx on table1(a);
select * from table(dbms_xplan.display);
Resultater
Plan hash value: 290895522
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | CREATE INDEX STATEMENT | | 1000K| 4882K| 683 (2)| 00:00:10 |
| 1 | INDEX BUILD NON UNIQUE| TABLE1_IDX | | | | |
| 2 | SORT CREATE INDEX | | 1000K| 4882K| | |
| 3 | TABLE ACCESS FULL | TABLE1 | 1000K| 4882K| 254 (5)| 00:00:04 |
-------------------------------------------------------------------------------------
Note
-----
- automatic DOP: skipped because of IO calibrate statistics are missing
- estimated index size: 24M bytes
Noter
Den faktiske oprettelsestid på mit system var 2,5 sekunder sammenlignet med estimat på 10 sekunder. Men det er stadig godt nok, hvis du kun leder efter et skøn over en størrelsesorden. Nøjagtigheden afhænger af at have nøjagtig tabelstatistik samt god systemstatistik
. (Men vær forsigtig, før du samler systemstatistik, det kan påvirke mange eksekveringsplaner!) Du kan rode med indstillingerne yderligere ved manuelt at ændre sys.aux_stats$
. Det er en af de få SYS-tabeller, som det er OK at ændre, selvom du stadig skal være forsigtig.