索引,可以增加查询速度,若没有索引,每次查询都必须是全表查询。例如,搜索某个记录时(如name="gdpuzxs")时,需要全表扫描一下,因为不知道有多少个name="gdpuzxs"的记录。若在字段name上建立了索引,oracle会构建索引条目(name:rowid),每次查询,可以快速定位到这行记录。

  (1)位图索引

  oracle的索引主要有B树索引以及位图索引。这里主要总结一下B树索引,主要有根节点,分支节点,叶子节点,结构图如下:

  

  每个索引条目都是按照升序排序的(也可以指定为降序),都有两个字段(键值对),对于根节点和分支节点,第一个字段是下属节点的最小键值,第二个字段是下属节点的地址。如根节点,(0,B1;500,B2;1000,B3)代表下属有三个节点,第一个节点的索引最小值为0,地址是B1;第二节点的索引最小值为500,地址是B2,依次类推。

  对于叶节点,同样有两个字段(键值对),第一个字段也是下属节点索引的最小值,第二字段是指向数据的rowid。比如你要查找值为150的数据,首先从根节点,进行对比,0<150<500,进入B1,0<150<200,进入L1,查找到值为150相对的rowid。

  (2)索引碎片

  频繁的对索引字段进行update,delete操作,会对索引造成大量的索引碎片,从而影响索引的使用效率。

  对某个索引行执行删除操作时,只是为该行增加了一个删除标志,这个索引行不会真正的释放内存空间。当insert新的数据的时候,也不能插入到该位置。

  所以,无论是插入,删除,更新索引数据,都需要消耗储存空间,增大B-TREE索引结构的深度,影响数据的查询速度。尤其是删除和修改,不仅造成空间的浪费,也增加了扫描索引块的速度。所以,建议对经常使用的索引表进行索引重建操作。

  (3)案例分析

  (1)新建一个testIndex表并且建立索引,如下:

create table testIndex(Id int)

create index index_1  on testIndex(id)

  (2)插入100万条数据,如下:

SQL> begin
2 for i in 1..1000000 loop
3 insert into testIndex values(i);
4 if mod(i,100)=0 then
5 commit;
6 end if;
7 end loop;
8 end;
9 /

  (3)索引碎片分析

  先删除70万条数据,如下:

delete from  testindex where rownum<=700000

  创建索引分析,查询结果如下:

analyze index index_1 validate structure

select name,del_lf_rows_len,lf_rows_len,(del_lf_rows_len/lf_rows_len)*100 as "索引碎片率" from index_stats;

  

  如果索引碎片率超过30%,建议对索引进行索引碎片整理。

  (4)索引碎片整理

alter index index_1 rebuild 

    再次执行索引碎片分析:索引碎片为0。

analyze index index_1 validate structure

select name,del_lf_rows_len,lf_rows_len,(del_lf_rows_len/lf_rows_len)*100 as "索引碎片率" from index_stats;

    

  参考网址:http://blog.itpub.net/41451/viewspace-1058441/

         http://www.cnblogs.com/zhaoguan_wang/p/5169821.html

Oracle索引以及索引碎片的更多相关文章

  1. 41.oracle索引,分析索引,索引碎片整理

    概述 索引分为B树索引和位图索引.我们主要研究B树索引,B树索引如下图(图片源自网络):

  2. ORACLE学习笔记 索引和约束

    /*** 约束 ***/ * 如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以在表级定义约 束,但如果某个约束作用于多个字段,  必须在表级定义约束* 在定义约束时可以通过CONSTRA ...

  3. oracle索引,索引的建立、修改、删除

    索引,索引的建立.修改.删除 2007-10-05 13:29 来源: 作者: 网友评论 0 条 浏览次数 2986 索引索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和 ...

  4. oracle 性能优化--索引总结

    索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据: Oracle存储索引的数据结构是B*树.位图索引也是如此,仅仅只是是叶子节点不同B*数索引: 索引由根节点.分支节点和叶子节点组成 ...

  5. Oracle中B-TREE索引的深入理解(转载)

    索引概述 索引与表一样,也属于段(segment)的一种.里面存放了用户的数据,跟表一样需要占用磁盘空间.只不过,在索引里的数据存放形式与表里的数据存放形式非常的不一样.在理解索引时,可以想象一本书, ...

  6. oracle之bitmap索引

    oracle常见的索引是BTree索引和Bitmap索引. BTree索引特点: 默认索引 适合大量增删改查 不能用or操作符 适合高基数的列(即唯一值多) 创建sql:create index li ...

  7. 简单了解,使用oracle中的索引,表分区

    索引的分类 如下: 物理分类 逻辑分类 分区或非分区索引 单列或组合索引 B树索引(标准索引) 唯一或非唯一索引 正常或反向键索引 基于函数索引 位图索引   B树索引 b树索引通常也称为标准索引,索 ...

  8. oracle如何进行索引监控分析和优化

    在生产环境.我们会发现: ① 索引表空间 I/O 非常高     ② "db file sequential read" 等待事件也比较高   这种迹象表明.整个数据库系统.索引的 ...

  9. Oracle中的索引

    1.Oracle 索引简介      在Oracle数据库中,存储的每一行数据都有一个rowID来标识.当Oracle中存储着大量的数据时,意味着有大量的rowID,此时想要快速定位指定的rowID, ...

随机推荐

  1. hiho一下第109周《Tower Defense Game》

    题目链接:传送门 题目大意:给你一棵树,根节点为1,树上每一个节点都有一个花费值和收入值(花费值>=收入值),要访问一个节点需先支付花费值,访问该节点结束后得到收入值 同时访问树时要求是有序的, ...

  2. 常用sql 增删改、批量、合并、去重、增列、

    自己总结的一些常用sql :插入.删除.批量更新.判重.新增列.数据库连接数 ---------------- 批量插入跨数据库 insert into ejpms.dbo.role (Name,In ...

  3. shopxx----权限添加

    shiro权限控制 一.角色管理请求地址 1.模板地址 /shopxx/WebContent/WEB-INF/template/admin/role/list.ftl shiro 权限拦截 配置安全管 ...

  4. 《JAVA多线程编程核心技术》 笔记:第四章、Lock的使用

    一.使用ReentrantLock类1.1 ReentrantLock的使用:1.2 ReentrantLock的不足:1.3 正确使用Condition实现等待/通知1.4 使用多个Conditio ...

  5. Idea之Tomcat

    安装配置   启动 三种方式,run,debug,coverage       面板说明     上面一排 Debugger:debug模式的时候显示方法,调用关系,参数值等, Server:打印日志 ...

  6. 并发编程6 锁&进程&队列

    1.进程的其他方法 2.验证进程空间隔离和守护进程 3.孤儿进程和僵尸进程 4.锁 for循环加join数据共享 5.进程队列的简单应用 6.通过队列实现进程间的通信 7.生产者消费者模型及Queue ...

  7. submit按钮修改宽高的坑

    近些天对h5非常感兴趣,边工作边学习,虽然比较累,但过得很踏实.每天都要学习一点东西,这样才能对得起自己.好了,废话不多说,进入今天的主题. 今天遇到了一个非常有趣的东西,就是在修改submit按钮的 ...

  8. 传说中的MATLAB1.0(1984年DOS界面182K、运行良好)附下载

    传说中的MATLAB1.0(1984年DOS界面182K.运行良好)附下载 你见过 MATLAB 最早的版本吗?下载一份 MATLAB 1.0,(只有182K, 只有20来个函数) 体会一下吧.MAT ...

  9. 转!!SpringMVC与Struts2区别与比较总结

    1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...

  10. 前端 CSS 边框

    border 边框 solid 实体的 red 边框什么颜色 <!DOCTYPE html> <html lang="en"> <head> & ...