Oracle kann mit dem EXPLAIN PLAN
die Indexerstellungszeit und Indexgröße abschätzen Befehl:
Beispielschema
--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);
Ergebnisse
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
Notizen
Die tatsächliche Erstellungszeit auf meinem System betrug 2,5 Sekunden, verglichen mit der Schätzung von 10 Sekunden. Aber das ist immer noch gut genug, wenn Sie nur nach einer Schätzung der Größenordnung suchen. Die Genauigkeit hängt von genauen Tabellenstatistiken sowie guten Systemstatistiken
. (Aber seien Sie vorsichtig, bevor Sie Systemstatistiken sammeln, es kann viele Ausführungspläne beeinflussen!) Sie können weiter an den Einstellungen herumspielen, indem Sie sys.aux_stats$
manuell ändern . Das ist eine der wenigen SYS-Tabellen, die Sie ändern können, obwohl Sie immer noch vorsichtig sein müssen.