如何估计Oracle索引的大小?

Jar*_*red 9 sql oracle

我正在考虑为Oracle表添加一个索引,但是我想首先估计索引的大小(我不需要精确的大小 - 只是估计.)

假设我可以访问有关表的所有元数据(行数,列数,列数据类型等),我可以执行任意Oracle SQL查询以获取有关表的当前状态的其他数据,并且知道我想要的索引定义是什么,我该如何估计这个大小?

cle*_*tus 10

您可以使用这些Oracle容量规划和大小调整电子表格.

对于一些不那么全面的事情,如果你只想回到信封类型粗略估计指数:

计算构成索引键的每个列的平均大小,并将列与一个rowid相加,并为索引行标题添加2个字节以获得平均行大小.现在为索引的pctfree值添加一点,得出一个开销因子,对于pctfree为10,可能为1.125.

索引表行的数量X avg row len X 1.125

注意 - 如果索引包含可为空的列,则每个表行可能不会出现在索引中.在单列索引上,其中90%的列为空,只有10%将进入索引.

比较估计与表空间范围分配方法,并在必要时调整最终答案.

此外,随着索引变得越来越大,开销因子越大越好,因为索引的数据越多,支持索引结构所需的分支块越多,并且计算实际上只是叶块的数字.


Chr*_*xon 5

您可以通过explain plan在 create index 语句上运行 来估计索引的大小:

create table t as
  select rownum r 
  from   dual 
  connect by level <= 1000000;

explain plan for
  create index i on t (r);

select * 
from   table(dbms_xplan.display(null, null, 'BASIC +NOTE'));

PLAN_TABLE_OUTPUT                                                                                                                         
--------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1744693673                                                                                                                 

---------------------------------------                                                                                                     
| Id  | Operation              | Name |                                                                                                     
---------------------------------------                                                                                                     
|   0 | CREATE INDEX STATEMENT |      |                                                                                                     
|   1 |  INDEX BUILD NON UNIQUE| I    |                                                                                                     
|   2 |   SORT CREATE INDEX    |      |                                                                                                     
|   3 |    TABLE ACCESS FULL   | T    |                                                                                                     
---------------------------------------                                                                                                     

Note                                                                                                                                        
-----                                                                                                                                       
   - estimated index size: 4194K bytes    
Run Code Online (Sandbox Code Playgroud)

看底部的“注意”部分:估计索引大小:4194K字节