在创建索引时,我们往往希望可以预估索引大小,以评估对现有project环境的影响,我们也希望创建索引的过程可以最小化的影响我们正在执行的project环境,并能查看索引的状况。

预估索引大小

预估索引大小,最好的办法是在測试环境中创建它,測试环境最好包括完整的project环境数据,否则仅仅有通过部分数据来推算完整的索引大小。

假设不能搭建測试环境,Oracle提供了存储过程DBMS_SPACE.CREATE_INDEX_COST来估算索引的大小,以下是一个样例:

declare
used_bytes number(10);
alloc_bytes number(10);
begin
dbms_stats.gather_table_stats(user, 'HISTORYALARM');
dbms_space.create_index_cost('create index idx_historyalarm on historyalarm(position1)',
used_bytes => used_bytes,
alloc_bytes => alloc_bytes);
dbms_output.put_line('used_bytes : ' || used_bytes);
dbms_output.put_line('alloc_bytes : ' || alloc_bytes);
end;

在计算索引大小的时候,你须要先收集表的统计信息,由于Oracle是依据表的数据信息来推算的,以下是输出的结果:

used_bytes : 151994511
alloc_bytes : 251658240

创建索引

在估算了索引大小后,假设没有问题,就能够開始实际的创建索引了:

create index idx_historyalarm on historyalarm(position1) tablespace uep4x_fm_index

创建索引的索引会对表加排他DDL锁(Exclusive DDL lock),这会防止其它会话得到他们自己的DDL锁或TM(DML)锁,也就是在创建索引期间你可以查询一个表,可是无法以不论什么方式改动这个表。这导致创建索引的操作在project环境中实施时会存在问题,因此,Oracle企业版提供了在线创建索引的方式:

create index idx_historyalarm on historyalarm(position1) tablespace uep4x_fm_index online

online将改变详细创建索引的过程,Oracle不会再加一个排他DDL锁来防止数据改动,改为试图得到表上的一个低级(mode 2)TM锁,这将有效地防止其它DDL(data definition language,包含CREATE、ALTER、DROP等)操作发生,但同意DML(data manipulation language,包含SELECT、UPDATE、INSERT、DELETE)操作正常进行。在Oracle的内部,Oracle会将创建索引期间做的DML操作放到一个暂时表中,等创建索引操作完毕后,再将DML操作所做的改动同步到新的索引。这样就有效的攻克了project环境中实施的问题。

查看索引信息

能够通过上面的方式查看创建成功后的索引:

select * from user_indexes where index_name = upper('idx_historyalarm')

能够通过以下的方式显示所占用的空间的实际数额:

select bytes from user_segments where segment_name = upper('idx_historyalarm')

以下是输出结果,空间分配字节数的预计量略小于实际使用量:

BYTES
--------------------------
293601280

随着记录插入到表中,该索引将添加,对索引大小监控能够确保有足够的磁盘空间,以适应未来的数据添加需求。

Oracle性能分析7:创建索引的更多相关文章

  1. Oracle性能分析12:对象统计信息

    对象统计信息描写叙述数据是如何在数据库中存储的,查询优化器使用这些统计信息来做出正确的决定.Oracle中有三种类型的对象统计信息:表统计.列统计和索引统计.而在每种类型中,有细分为:表或索引级别的统 ...

  2. MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划

    这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...

  3. oracle 物化视图及创建索引

    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体 ...

  4. oracle海量数据中提升创建索引的速度

    基本信息情况: 数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 操作系统版本:Ce ...

  5. Oracle性能分析3:TKPROF简介

    tkprof它是Oracle它配备了一个命令直插式工具,其主要作用是将原始跟踪文件格文本文件的类型,例如,最简单的方法,使用下面的: tkprof ly_ora_128636.trc ly_ora_1 ...

  6. Oracle性能分析11:系统统计信息

    早期Oracle查询优化器的开销计算是基于运行SQL语句所须要的物理读,这种方法被叫做I/O开销模式(I/O cost model),这种方法的主要缺点是觉得单块读和多块读开销相当.在Oracle 8 ...

  7. Oracle性能分析1:开启SQL跟踪和获取trace文件

    当Oracle查询出现效率问题时,我们往往须要了解问题所在,这样才干针对问题给出解决方式.Oracle提供了SQL运行的trace信息,当中包括了SQL语句的文本信息.一些运行统计,处理过程中的等待, ...

  8. Oracle 性能分析

    1.--查出耗时长的 10条SQL select * from (select v.sql_id, v.child_number, v.sql_text, v.elapsed_time, v.cpu_ ...

  9. Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则

    Mysql高级操作 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 树的区别: 二叉树:可能产生不平衡,顺序数据可能会出现链表结构 ...

随机推荐

  1. [Swust OJ 166]--方程的解数(hash法)

    题目链接:http://acm.swust.edu.cn/problem/0166/ Time limit(ms): 5000 Memory limit(kb): 65535   有如下方程组: A1 ...

  2. Hibernate 笔记1

    Hibernate表generator标签的作用,如下图,

  3. String "+" 的补充说明---行粒度

    String 中“+” 的操作的补充说明 在使用“+”的时候,会创建一个StringBuilder对象,然后invokevirtual append()操作 “+”操作创建StringBuilder的 ...

  4. 浙江工商大学15年校赛I题 Inversion 【归并排序求逆序对】

    Inversion Time Limit 1s Memory Limit 131072KB Judge Program Standard Ratio(Solve/Submit) 15.00%(3/20 ...

  5. WPF: 针对Windows 8优化菜单栏和工具栏

    原文 WPF: 针对Windows 8优化菜单栏和工具栏 目录 1. 关于菜单图标大小 2. 关于IsEnabled和工具栏图标 3. 针对.NET 3.x的菜单栏和工具栏外观 返回目录 1. 关于菜 ...

  6. html中事件处理中的this和event对象

    在用js编写页面事件处理代码时,会经常涉及到this和event对象,但有时在采用不同的事件处理,尤其是在与自定义的对象关联时,这些对象的指向变的有些复杂. 本文来详细介绍下各种场景下 这些对象 真正 ...

  7. 关于libgdx中UI控件的旋转和缩放的备忘

    最近遇到这样一个问题,定义了一个ImageButton后,想对按钮进行下旋转,结果setRotation(-90f),不起作用.后来在官网上找到了原因 关于UI控件的旋转 缩放官网上有这样一段话(链接 ...

  8. 3522: [Poi2014]Hotel( 树形dp )

    枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) = dist( x , b ) = dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显 ...

  9. PostgreSQL正则表达式查询

    参考http://www.php100.com/manual/PostgreSQL8/functions-matching.html LIKE string LIKE pattern [ ESCAPE ...

  10. java--线程的睡眠sleep()

    package MyTest; public class Demo1 extends Thread { public void run() { loop(); } public void loop() ...