一.1  oracle 如何预估将要创建的索引的大小

oracle 提供了2种可以预估将要创建的索引大小的办法:

①  利用包 Dbms_space.create_index_cost 直接得到

②  利用11g新特性 Note raised when explain plan for create index

下边分别举例说明。

一.2   环境说明

[oracle@rhel6_lhr ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Fri Dec 26 15:58:06 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options

SQL> create table test_index_size as select * from dba_objects;

Table created.

SQL>  EXEC DBMS_STATS.gather_table_stats(ownname => 'SYS',tabname => 'TEST_INDEX_SIZE');

PL/SQL procedure successfully completed.

一.3  第一种 Dbms_space.create_index_cost

脚本:

declare

l_index_ddl       varchar2(1000);

l_used_bytes      number;

l_allocated_bytes number;

begin

dbms_space.create_index_cost(ddl         => 'create index idx_t on sys.test_index_size(object_id) ',

used_bytes  => l_used_bytes,

alloc_bytes => l_allocated_bytes);

dbms_output.put_line('used= ' || l_used_bytes || 'bytes' ||

'     allocated= ' || l_allocated_bytes || 'bytes');

end;

/

实验:

SQL> set serveroutput on
SQL> declare

2    l_index_ddl varchar2(1000);

3    l_used_bytes number;

4    l_allocated_bytes number;

5  begin

6    dbms_space.create_index_cost(ddl => 'create index idx_t on sys.test_index_size(object_id) ',

7      used_bytes => l_used_bytes,

8      alloc_bytes => l_allocated_bytes);

9    dbms_output.put_line('used= ' || l_used_bytes || 'bytes' ||

10      '   allocated= ' || l_allocated_bytes || 'bytes');

11  end;

12  /

used= 383105bytes     allocated= 2097152bytes

PL/SQL procedure successfully completed.

SQL>

PL/SQL 过程已成功完成。
说明:  used_bytes  给出索引数据实际表现的字节数。
      allocated 是当实际创建索引时在表空间中实际占用的字节数。

一.4  第二种11g新特性:Note raised when explain plan for create index

这是一个挺实用的小特性,在11g r2中使用explain plan for create index时Oracle会提示评估的索引大小(estimated index size)了:

SQL> set linesize 200 pagesize 1400;

SQL>  explain plan for create index idx_t on sys.test_index_size(object_id) ;

Explained.

SQL> select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT

-------------------------------------------------------------------------------------

Plan hash value: 32582980

--------------------------------------------------------------------------------

| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time    |

--------------------------------------------------------------------------------

|   0 | CREATE INDEX STATEMENT |       | 76621 |   374K|   350  (1)| 00:00:05 |

|   1 |  INDEX BUILD NON UNIQUE| IDX_T |       |       |      |        |

|   2 |   SORT CREATE INDEX    |       | 76621 |   374K|      |        |

|   3 |    INDEX FAST FULL SCAN| IDX_T |       |       |      |        |

--------------------------------------------------------------------------------

Note

-----

- estimated index size: 2097K bytes

14 rows selected.

一.5  创建真实索引

SQL> create index idx_t on sys.test_index_size(object_id) ;

Index created.

SQL>  analyze index IDX_T validate structure;

Index analyzed.

SQL> select bytes from dba_segments where segment_name='IDX_T';

BYTES

----------

2097152

可以看到2种办法给出的索引评估大小与实际索引占用空间差别不大,但这里有个前提条件就是预估索引大小之前必须对表进行分析过。

oracle 如何预估将要创建的索引的大小的更多相关文章

  1. Oracle SQL Lesson (11) - 创建其他数据库对象(试图/序列/索引/同义词)

    schema(模式)一个用户下一组对象的集合,一般与用户名一致. 视图 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias].. ...

  2. Oracle学习总结_day06_视图&序列&索引

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day 06 视图,索引,序列 视图 什么是视图: 视 ...

  3. Oracle 优化——位图、函数等索引介绍

    一.位图索引 我将使用一个例子,来描述位图索引的存储,并分析它的优点. Table :Loans 放贷信息 ID userId 行业投向 币种 证件类型 还本付息方式 状态 1 1 农业 人民币 身份 ...

  4. ORACLE中关于外键缺少索引的探讨和总结

    在ORACLE数据库中,定义外键约束时,ORACLE是不会自动创建对应索引的,必须手动在外键约束相关的列上创建索引.那么外键字段上是否有必要创建索引呢?如果有必要的话,巡检时,如何找出外键字段上没有创 ...

  5. 四百万条数据创建简单索引报错ora01652

    经过几次度娘之后终于找到了解决方案,因为当时创建的indextest表是属于系统表空间,而系统表空间默认好像有大小限制,所以需要修改系统表空间的大小,至于修改表空间的语句可以随时度娘. 经过修改,创建 ...

  6. Oracle物化视图的创建及使用(一

    Oracle物化视图的创建及使用 http://blog.csdn.net/tegwy/article/details/8935058 先看简单创建语句: create   materialized  ...

  7. oracle学习篇十二:索引

    索引: 查询User_indexes可以获取有关用户已创建的索引的详细信息. 查询User_ind_partitions可以获取有关用户已创建的分区索引的详细信息. 查询User_ind_column ...

  8. Oracle性能调优之虚拟索引用法简介

    本博客记录一下Oracle虚拟索引的用法,虚拟索引是定义在数据字典中的伪索引,可以说是伪列,没有修改的索引字段的.虚拟索引的目的模拟索引,不会增加存储空间的使用,有了虚拟索引,开发者使用执行计划的时候 ...

  9. Oracle系列十四 序列、索引和同义词

    序列 : 提供有规律的数值.索引  : 提高查询的效率同义词  :给对象起别名 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以 ...

随机推荐

  1. SpringBoot Error creating bean with name 'dataSource' defined in class path resource。。。

    启动spring boot项目出错 解决方法在Application类上增加:@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration ...

  2. 关于Oracle to_date函数的高级用法

    由于种种原因,在我们的系统中,账套期间(PERIOD_NAME)由于格式设置的原因,数据库层存储的格式如下 Mar-19,而不是常规的2019-03. 我们无法更改数据库,涉及到的点太多. 但是期间数 ...

  3. Android Studio运行Hello World程序

    老的神舟本本装上了深度LINUX了...应该是基于ubuntu的,安装软件用的apt-get而不是yum 想重装学下android原生开发,官网下载了android studio, 发现不用FQ也能下 ...

  4. how to transfer your linux to new work environment

    tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --ex ...

  5. 查找算法(3)--Interpolation search--插值查找

    1. 插值查找 (1)说明 在介绍插值查找之前,首先考虑一个新问题,为什么上述算法一定要是折半,而不是折四分之一或者折更多呢? 打个比方,在英文字典里面查“apple”,你下意识翻开字典是翻前面的书页 ...

  6. C语言设计模式

    一 .C语言和设计模式(继承.封装.多态) C++有三个最重要的特点,即继承.封装.多态.我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性. ( ...

  7. Mysql日期函数说明

    1.获取当天日期 current_date  ->   2019-07-17 00:00:00 2.获取昨天日期函数 date_sub(current_date,INTERVAL 1 day)  ...

  8. Web API之Web Components

    本文参考<你的前端框架要被web组件替代了>. 于2011年面世的Web Components是一套功能组件,让开发者可以使用 HTML.CSS 和 JavaScript 创建可复用的组件 ...

  9. Mysql操作命令(基础)

    创建数据库 CREATE DATABASE name; 显示所有数据库 SHOW DATABASES; 删除数据库 DROP DATABASE name; 选择数据库 USE DATABASENAME ...

  10. Overview to “Toon/Cel shading”

    转自:https://blog.felixkate.net/2017/01/19/toon-shading/ For the last couple of weeks I often had disc ...