sql >> Databasteknik >  >> RDS >> Oracle

Uppskattning av tid för att skapa index i oracle

Oracle kan uppskatta tid och indexstorlek för att skapa index med EXPLAIN PLAN kommando:

Exempelschema

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

Resultat

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

Anteckningar

Den faktiska skapelsetiden på mitt system var 2,5 sekunder, jämfört med uppskattningen på 10 sekunder. Men det är fortfarande tillräckligt bra om du bara letar efter en uppskattning av storleksordningen. Noggrannheten beror på att ha korrekt tabellstatistik samt bra systemstatistik . (Men var försiktig innan du samlar systemstatistik, det kan påverka många exekveringsplaner!) Du kan pilla ytterligare med inställningarna genom att manuellt ändra sys.aux_stats$ . Det är en av få SYS-tabeller som det är OK att ändra, även om du fortfarande måste vara försiktig.



  1. Hur tar jag reda på min MySQL URL, värd, port och användarnamn?

  2. Hämta datum/tid från en Unix-tidsstämpel i SQLite

  3. Execute Immediate misslyckas även med CREATE-tabellbeviljande

  4. Söker efter flera nummer i flera nummerfält