伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小?

来源:本站原创 浏览:137次 时间:2022-01-19


♣          题目         部分

在Oracle中,如何预估即将创建索引的大小?


     
♣          答案部分          



如果当前表大小是1TB,那么在某一列上创建索引的话索引大概占用多大的空间?对于这个问题,Oracle提供了2种可以预估将要创建的索引大小的办法:

① 利用系统包DBMS_SPACE.CREATE_INDEX_COST直接得到。利用DBMS_SPACE.CREATE_TABLE_COST可以获得将要创建的表的大小。

② 利用Oracle 11g新特性NOTE RAISED WHEN EXPLAIN PLAN FOR CREATE INDEX。

下面分别举例说明。

数据库版本为Oracle 11.2.0.3,实验过程如下所示:

1SQL> CREATE TABLE TEST_INDEX_SIZE AS  SELECT * FROM DBA_OBJECTS;2Table created.3SQL>  EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'SYS',TABNAME => 'TEST_INDEX_SIZE');4PL/SQL procedure successfully completed.
     


第一种办法:DBMS_SPACE.CREATE_INDEX_COST

 1SQL> SET SERVEROUTPUT ON 2SQL> DECLARE 3  2    L_INDEX_DDL     VARCHAR2(1000); 4  3    L_USED_BYTES     NUMBER; 5  4    L_ALLOCATED_BYTES NUMBER; 6  5  BEGIN 7  6    DBMS_SPACE.CREATE_INDEX_COST(DDL     => 'CREATE INDEX IDX_T ON SYS.TEST_INDEX_SIZE(OBJECT_ID)', 8  7                      USED_BYTES  => L_USED_BYTES, 9  8                      ALLOC_BYTES => L_ALLOCATED_BYTES);10  9    DBMS_OUTPUT.PUT_LINE('USED= ' || L_USED_BYTES || 'BYTES' ||11 10                  '     ALLOCATED= ' || L_ALLOCATED_BYTES || 'BYTES');12 11  END;13 12  /14USED= 383105BYTES     ALLOCATED= 2097152BYTES15PL/SQL procedure successfully completed.
     


 

说明:USED_BYTES代表实际使用的字节数,而ALLOCATED代表申请的字节数。

第二种办法:Oracle 11g新特性:NOTE RAISED WHEN EXPLAIN PLAN FOR CREATE INDEX

这是一个非常实用的小特性,在Oracle 11gR2中使用EXPLAIN PLAN FOR CREATE INDEX时,Oracle会提示评估的索引大小(ESTIMATED INDEX SIZE)了:

 1SQL> SET LINESIZE 200 PAGESIZE 1400; 2SQL>  EXPLAIN PLAN FOR CREATE INDEX IDX_T ON SYS.TEST_INDEX_SIZE(OBJECT_ID); 3Explained. 4SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY()); 5PLAN_TABLE_OUTPUT 6------------------------------------------------------------------------------------- 7Plan hash value: 32582980 8-------------------------------------------------------------------------------- 9| Id  | Operation               | Name  | Rows  | Bytes | Cost (%CPU)| Time     |10--------------------------------------------------------------------------------11|   0 | CREATE INDEX STATEMENT |       | 76621 |   374K|   350  (1) | 00:00:05 |12|   1 |  INDEX BUILD NON UNIQUE| IDX_T |       |       |            |            |13|   2 |   SORT CREATE INDEX    |       | 76621 |   374K|               |             |14|   3 |    INDEX FAST FULL SCAN| IDX_T |       |       |               |             |15------------------------------------------------------------------����,�Ͽ�--------------16Note17-----18   - estimated index size: 2097K bytes1914 rows selected.
     


创建真实索引查看占用的字节数:

1SQL> CREATE INDEX IDX_T ON SYS.TEST_INDEX_SIZE(OBJECT_ID);2Index created.3SQL>  ANALYZE INDEX IDX_T VALIDATE STRUCTURE;4Index analyzed.5SQL> SELECT BYTES FROM DBA_SEGMENTS WHERE SEGMENT_NAME='IDX_T';6     BYTES7----------8   2097152
     


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

& 说明:

有关如何预估即将创建索引的大小可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-1381160/

 



本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。



     ---------------优质麦课------------

 

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net