Oracle puede estimar el tiempo de creación del índice y el tamaño del índice con EXPLAIN PLAN
comando:
Esquema de muestra
--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);
Resultados
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
Notas
El tiempo de creación real en mi sistema fue de 2,5 segundos, en comparación con la estimación de 10 segundos. Pero eso es lo suficientemente bueno si solo está buscando una estimación de orden de magnitud. La precisión depende de tener estadísticas de tabla precisas, así como buenas estadísticas del sistema
. (Pero tenga cuidado antes de recopilar estadísticas del sistema, ¡puede influir en muchos planes de ejecución!) Puede jugar más con la configuración modificando manualmente sys.aux_stats$
. Esa es una de las pocas tablas SYS que está bien modificar, aunque aún debe tener cuidado.