sql >> Database >  >> RDS >> Oracle

Tijd voor het maken van indexen in orakel schatten

Oracle kan de tijd voor het maken van indexen en de grootte van de index schatten met het EXPLAIN PLAN commando:

Voorbeeldschema

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

Resultaten

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

Opmerkingen

De werkelijke aanmaaktijd op mijn systeem was 2,5 seconden, vergeleken met de schatting van 10 seconden. Maar dat is nog steeds goed genoeg als u alleen op zoek bent naar een schatting van de orde van grootte. De nauwkeurigheid hangt af van nauwkeurige tabelstatistieken en goede systeemstatistieken . (Maar wees voorzichtig voordat u systeemstatistieken verzamelt, dit kan veel uitvoeringsplannen beïnvloeden!) U kunt verder spelen met de instellingen door sys.aux_stats$ handmatig aan te passen . Dat is een van de weinige SYS-tabellen die je kunt wijzigen, hoewel je nog steeds voorzichtig moet zijn.



  1. Query om telling per uur op te halen en nul indien geen

  2. MySQL-opgeslagen procedure, het verwerken van meerdere cursors en queryresultaten

  3. Een kolom invoegen in een andere kolom binnen dezelfde tabel in SQL Server

  4. Hoe maak ik een lijst van actieve / open verbindingen in Oracle?