概述

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

  索引是与表相关的一个可选结构,在逻辑上和物理上都独立于表数据,索引能优化查询,不能优化DML,oracle自动维护索引,频繁的DML操作反而会引起大量的索引维护。

  如果sql语句仅仅访问被索引的列,那么数据库只需从索引中读取数据,而不会读取表;如果该语句还要访问未被索引的列,那么数据库会使用rowid来查找表中的行,通常,为检索表数据,数据库以交换方式先读取索引块,然后读取对应的表。

  索引的目的是减少IO,

  1. 大表,返回的行数<5%
  2. 经常使用where子句查询的列
  3. 离散度高的列
  4. 更新键值代价低
  5. 逻辑AND、OR效率高
  6. 查看索引建在哪表哪列
    select * from user_indexes;
    select * from user_ind_columns;

索引的使用

  1. 唯一索引
    create unique index empno_idx on emp(empno);
  2. 一般索引
    create index empno_idx on emp(empno);
  3. 组合索引
    create index job_deptno_idx on emp(job,deptno);
  4. 函数索引:查询时必须用到这个函数才会使用到。
    create index fun_idx on emp(lower(ename));
  5. 。。。

索引问题

查看执行计划:set autotrace traceonly explain;

  索引碎片问题:由于基表做DML操作,导致索引表块的自动更改操作,尤其是基表的delete操作会引起index表的index_entries的逻辑删除,注意只有当一个索引块中的全部index_entry都被删除了,才会把这个索引块删除,索引对基表的delete、insert操作都会产生索引碎片问题。

  在oracle文档中并没有清晰的给出索引碎片的量化标准,oracle建议通过segment advisor(片段顾问)解决表和索引的碎片问题(后面的课程会提及),如果你想自行解决,可以通过查看 index_stats视图,当以下三种情形之一发生时,说明积累的碎片应该整理了(经验之谈)

  1. height >= 4 (概述中图示索引树的高度是3)
  2. pct_used < 50%
  3. del_lf_rows/lf_row > 0.2

实操:

先建表,建索引

然后插入1000000条数据

分析索引:analyse index t_idx validate structure;

查看分析结果:select name,height,pct_used,del_lf_rows/lf_rows from index_stats;

然后我们来破坏一下索引,重新查看一下分析结果

可以看到最后一个指标变了。说明产生一些碎片了。那么需要进行整理:

可见最后一个指标正常了(低于0.2)。

41.oracle索引,分析索引,索引碎片整理的更多相关文章

  1. SqlServer数据库碎片整理——BCC SHOWCONTIG

    SQLServer提供了一个数据库命令——DBCC SHOWCONTIG——来确定一个指定的表或索引是否有碎片.  示例: DBCC SHOWCONTIG语法: 显示指定的表的数据和索引的碎片信息.  ...

  2. sql server 碎片整理——DBCC SHOWCONTIG

    转自: 1.http://blog.sina.com.cn/s/blog_6d2675450101ks6i.html 2.http://www.cnblogs.com/CareySon/archive ...

  3. SQL Server数据库碎片整理

    碎片产生   在SQL Server中,存储数据的最小单位是页,每一页所能容纳的数据为8060字节.而页的组织方式是通过B树结构  SQL Server向每个页内存储数据的最小单位是表的行(Row)  ...

  4. sql索引碎片产生的原理 解决碎片的办法(sql碎片整理)(转)

    本文讲述了SQL SERVER中碎片产生的原理,内部碎片和外部碎片的概念.以及解决碎片的办法和填充因子.在数据库中,往往每一个对于某一方面性能增加的功能也会伴随着另一方面性能的减弱.系统的学习数据库知 ...

  5. SQL Server索引碎片整理实际操作记录

    SQL Server 版本是 2008 R2. 查询数据库索引碎片情况的 SQL 语句(来源): SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, ind ...

  6. sql server维护解决方案(备份、检查完整性、索引碎片整理)

    请务必看原文 原文:https://ola.hallengren.com/frequently-asked-questions.html 经常问的问题 入门 如何开始使用SQL Server维护解决方 ...

  7. sql索引碎片产生的原理 解决碎片的办法(sql碎片整理)

    本文讲述了SQL SERVER中碎片产生的原理,内部碎片和外部碎片的概念.以及解决碎片的办法和填充因子.在数据库中,往往每一个对于某一方面性能增加的功能也会伴随着另一方面性能的减弱.系统的学习数据库知 ...

  8. SQL Server 索引碎片整理

    索引碎片整理的四种方法: 1)删除索引并重建 2)使用 DROP_EXISTING 语句重建索引 3)使用 ALTER INDEX REBUILD 语句重建索引 4)使用 ALTER INDEX RE ...

  9. Oracle性能分析7:创建索引

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

随机推荐

  1. Unknown type name 'NSString'

    今天看到个问题,编辑工程提示Unknown type name 'NSString',如下图 导致出现异常的原因是是因为工程中添加了ZipArchive(第三方开源解压缩库) 一般情况下出现“Unkn ...

  2. Redis多API开发实践

    一.Redis API支持 Redis提供了各类开发语言的API,方便开发语言连接使用Redis. https://redis.io/clients 官方网站提供了不同开发语言的API程序. Pyth ...

  3. Python爬虫进阶三之Scrapy框架安装配置

    初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 ...

  4. nignx重启

    .进入nginx安装目录sbin下 .输入./nginx -s reload

  5. JSONResult引用某博客

    http://www.cnblogs.com/JerryWang1991/archive/2013/03/08/2950457.html 最近开始用MVC做项目,在使用 JsonResult返回数据的 ...

  6. 使用寄存器点亮LED等

    最基本的输入功能是检测外部输入电平,如把 GPIO引脚连接到按键,通过电平高低区分按键是否被按下. 基本结构分析 2. P-MOS管和 N-MOS管 main.c中的main函数

  7. Android布局属性说明

    Android布局LinearLayout注意设置属性android:orientation属性,否则有的组件可能无法显示. 该属性不设置时默认为horizontal.此时第一个控件的宽度若设置成“f ...

  8. Windows下安装Redis及php的redis拓展教程

    一.安装前必读 Windows 64位操作系统 Redis 安装包(版本3.0.5,截止2017-05-29最新redis版本为3.2.9) 注意事项: 1.在window下如果你还需安装php的re ...

  9. 排序:桶排序Bucket sort

    补充说明三点 1,桶排序是稳定的 2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 无序数组有个要求,就是成员隶属于 ...

  10. rzdatetimepicker

    两项选为True时可显示今天和圆圈 此属性可使右边按钮下平滑 注意Format中的表示月份的MM一定要大写,不然修改时和分钟会联动.