sql >> Databáze >  >> RDS >> Oracle

Odhad doby vytvoření indexu v oracle

Oracle dokáže odhadnout dobu vytvoření indexu a velikost indexu pomocí EXPLAIN PLAN příkaz:

Ukázkové 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);

Výsledky

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

Poznámky

Skutečná doba vytvoření v mém systému byla 2,5 sekundy, ve srovnání s odhadem 10 sekund. Ale to je stále dost dobré, pokud hledáte pouze řádový odhad. Přesnost závisí na tom, zda máte přesné statistiky tabulky a také dobré systémové statistiky . (Ale buďte opatrní, než budete shromažďovat systémové statistiky, může to ovlivnit mnoho realizačních plánů!) S nastavením si můžete dále pohrávat ruční úpravou sys.aux_stats$ . To je jedna z mála tabulek SYS, kterou lze upravovat, i když stále musíte být opatrní.



  1. Hlavní replikace Mysql

  2. Při použití Django bez syncdb nebyla nalezena chyba

  3. Výkonný způsob, jak vypsat cizí klíče pro tabulku MySQL?

  4. PHP/MySQL:Modelujte opakující se události v databázi, ale dotazujte se na rozsahy dat