我正在考虑为Oracle表添加一个索引,但是我想首先估计索引的大小(我不需要精确的大小 - 只是估计.)
假设我可以访问有关表的所有元数据(行数,列数,列数据类型等),我可以执行任意Oracle SQL查询以获取有关表的当前状态的其他数据,并且知道我想要的索引定义是什么,我该如何估计这个大小?
cle*_*tus 10
您可以使用这些Oracle容量规划和大小调整电子表格.
对于一些不那么全面的事情,如果你只想回到信封类型粗略估计指数:
计算构成索引键的每个列的平均大小,并将列与一个rowid相加,并为索引行标题添加2个字节以获得平均行大小.现在为索引的pctfree值添加一点,得出一个开销因子,对于pctfree为10,可能为1.125.
索引表行的数量X avg row len X 1.125
注意 - 如果索引包含可为空的列,则每个表行可能不会出现在索引中.在单列索引上,其中90%的列为空,只有10%将进入索引.
比较估计与表空间范围分配方法,并在必要时调整最终答案.
此外,随着索引变得越来越大,开销因子越大越好,因为索引的数据越多,支持索引结构所需的分支块越多,并且计算实际上只是叶块的数字.
您可以通过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字节
| 归档时间: |
|
| 查看次数: |
11145 次 |
| 最近记录: |