Oracle може да оцени времето за създаване на индекс и размера на индекса с EXPLAIN PLAN
команда:
Примерна схема
--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);
Резултати
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
Бележки
Действителното време за създаване на моята система беше 2,5 секунди, в сравнение с оценката от 10 секунди. Но това все още е достатъчно добро, ако търсите само приблизителна оценка от порядък. Точността зависи от наличието на точни статистически данни за таблицата, както и от добър системна статистика
. (Но бъдете внимателни, преди да съберете системна статистика, това може да повлияе на много планове за изпълнение!) Можете допълнително да си играете с настройките, като промените ръчно sys.aux_stats$
. Това е една от малкото SYS таблици, които е добре да модифицирате, въпреки че все още трябва да внимавате.