Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Estimando o tempo de criação do índice no oracle


A Oracle pode estimar o tempo de criação do índice e o tamanho do índice com o EXPLAIN PLAN comando:

Esquema de amostra
--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

Observações

O tempo real de criação no meu sistema foi de 2,5 segundos, comparado com a estimativa de 10 segundos. Mas isso ainda é bom o suficiente se você estiver procurando apenas uma estimativa de ordem de magnitude. A precisão depende de estatísticas de tabela precisas, bem como estatísticas do sistema . (Mas tenha cuidado antes de coletar estatísticas do sistema, isso pode influenciar muitos planos de execução!) Você pode mexer ainda mais nas configurações modificando manualmente sys.aux_stats$ . Essa é uma das poucas tabelas SYS que não há problema em modificar, embora você ainda precise ter cuidado.