【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3361字,纯文字阅读大概需要5分钟。
内容图文
![【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小?](/upload/InfoBanner/zyjiaocheng/860/febda43a4ab74b33aa6725e4654eb85a.jpg)
在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= 2097152BYTES 15PL/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-------------------------------------------------------------------------------- 16Note 17----- 18 - estimated index size: 2097K bytes 1914 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 BYTES 7---------- 8 2097152? ? ?
从上面的内容可以看到,两种办法给出的索引评估大小与实际索引占用空间大约都为2M,所以,差别并不大,但这里有个前提条件就是预估索引大小之前必须对表进行分析过。
& 说明:
有关如何预估即将创建索引的大小可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-1381160/
本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
![【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小? - 文章图片](/upload/getfiles/0001/2021/5/7/20210507120715071.jpg)
---------------优质麦课------------
内容总结
以上是互联网集市为您收集整理的【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小?全部内容,希望文章能够帮你解决【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。