Oracle
 sql >> Base de données >  >> RDS >> Oracle

Estimation du temps de création de l'index dans Oracle

Oracle peut estimer le temps de création d'index et la taille de l'index avec le EXPLAIN PLAN commande :

Exemple de schéma

--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);

Résultats

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

Remarques

Le temps de création réel sur mon système était de 2,5 secondes, contre une estimation de 10 secondes. Mais cela reste suffisant si vous ne recherchez qu'une estimation d'un ordre de grandeur. La précision dépend de la précision des statistiques de table ainsi que de la bonne statistiques du système . (Mais soyez prudent avant de collecter des statistiques système, cela peut influencer de nombreux plans d'exécution !) Vous pouvez encore modifier les paramètres en modifiant manuellement sys.aux_stats$ . C'est l'une des rares tables SYS qu'il est acceptable de modifier, bien que vous deviez toujours faire attention.