我发现 Oracle 环境中有一些表可以从新索引中受益。
然而,它们是大表,范围从 1M 寄存器到 300M 寄存器,所以我会首先尝试估计创建索引需要多长时间,所以我至少知道它需要的数量级(小时、天、周)?
是否有一些启发式/oracle 功能/经验法则可以帮助我解决这个问题?
最佳答案
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 秒。但如果你只是在寻找一个数量级的估计,那仍然足够好。准确性取决于具有准确的表统计信息以及良好的 system statistics . (但是在收集系统统计信息之前要小心,它可能会影响很多执行计划!)您可以通过手动修改
sys.aux_stats$
进一步摆弄设置。 .这是少数可以修改的 SYS 表之一,尽管您仍然需要小心。
关于oracle - 在oracle中估计索引创建时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3071930/