为何需要重建Oracle索引

如果索引因为某些原因无效或者因为很长时间没有维护而产生过多的索引碎片(Index Fragment) ,需要通过重建索引来消除索引碎片。何时需要重建索引,可以利用下面的过程进行判断。

查询数据库中有哪些索引。

SQL>SELECT OWNER,INDEX_NAME FROM user_indexes;

SQL语句的执行结果是:

INDEX_NAME                     TABLE_OWNER                    TABLE_NAME

------------------------------ ------------------------------ --------------------------- -------------

I_ID_SAMLLTABLE                SCOTT                          SMALLTABLE

I_ID_BIGTABLE                  SCOTT                          BIGTABLE

PK_EMP                         SCOTT                          EMP

PK_DEPT                        SCOTT                          DEPT

本文将以索引I_ID_BIGTABLE为例。

对索引INDF5进行分析。

SQL> ANALYZE index I_ID_BIGTABLE VALIDATE STRUCTURE;

Index analyzed

从视图INDEX_STATS中获得索引I_ID_BIGTABLE的统计信息。

SQL>SELECT HEIGHT,(DEL_LF_ROWS_LEN/LF_ROWS_LEN)*100 FROM INDEX_STATS WHERE NAME='I_ID_BIGTABLE';

SQL语句的执行结果是:

HEIGHT (DEL_LF_ROWS_LEN/LF_ROWS_LEN)*

---------- ------------------------------

       1 10.1

其中,字典INDEX_STATS表示存放索引的统计信息;列DEL_LF_ROWS_LEN表示索引删除行数;列 LF_ROWS_LEN表示索引总行数;列HEIGHT表示二叉树中从根块到叶块的层次(深度)。

如果满足下面其中一个条件,则要考虑重建索引:(DEL_LF_ROWS_LEN/LF_ROWS_LEN)*100的值大于 20HEIGHT的值大于4(说明二叉树的层次太多)

使用ALTER INDEX ... REBUILD命令重建索引I_ID_BIGTABLE。SQL> ALTER INDEX I_ID_BIGTABLE REBUILD;

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

时间: 2024-10-01 06:44:10

为何需要重建Oracle索引的相关文章

大数据-Oracle索引不生效是什么情况

问题描述 Oracle索引不生效是什么情况 原本的表没有设置索引,数据大约是5000多W.后来因为查询性能太差,决定优化,准备在某个唯一列上建一个索引.首先从原表导了1500W数据进行测试,测试时不加索引查一条记录大约一分钟.后来加了个Normal索引,查询时间在2秒以内,觉得很满意,所以按照相同结构又建了个表,用的一样的数据,准备再试验一次,查了查,确实慢,遂也给加上Normal索引,但是这回查询性能没变化了...怎么查都是一分钟左右.谁能给我讲讲为什么???

PHP删除特定数组内容并且重建数组索引的方法.

复制代码 代码如下: $a = array('a','b','c','d'); unset($a[2]); print_r($a); 但是这种方法的最大缺点是没有重建数组索引. 经过查资料后.原来PHP提供了这个功能.只不过很间接.. 这个函数是array_splice. 为了使用方便.我封装成了一个函数.方便大家使用. 复制代码 代码如下: function array_remove(&$arr,$offset){ array_splice($arr,$offset,1); } $a = ar

Oracle索引表的使用(Table Index)

oracle|索引 create or replace procedure proc_XXX(        p_iBillMonth    in  number,        p_tab           in  number,                p_nStatus       out number,        p_szErrorMsg    out varchar2) is        type t_cur is ref cursor;        v_ser    

利用oradim重建Oracle服务(转)

oracle 在Windows系统中有些时候,Oracle的数据库会无法自动启动成功,但是手动启动却是可以的,在这种情况下我们可以尝试重新创建Oracle服务来看看问题是否能够解决. 重建Oracle服务可以利用Oracle在Windows操作系统下特有的oradim使用程序. 数据库的SID可以通过下面的方法知道: 检查windows的服务,找到类似于OracleServiceXXXX的服务名称,其中的XXXX部分就是数据库的SID,比如如果数据库的SID是test,那么服务名称就是Oracl

Oracle索引扫描的4个类别

学习Oracle时,你可能会遇到Oracle索引扫描问题,这里将介绍Oracle索引扫描问题的解决方法,在这里拿出来和大家分享一 下.根据索引的类型与where限制条件的不同,有4种类型的Oracle索引扫描: ◆索引唯一扫描(index unique scan) ◆索引范围扫描(index range scan) ◆索引全扫描(index full scan) ◆索引快速扫描(index fast full scan) (1) 索引唯一扫描(index unique scan) 通过唯一索引查

深入剖析-Oracle索引分支块的结构

作者介绍 崔华   网名 dbsnake Oracle ACE Director,ACOUG 核心专家 重要结论 1.每个索引分支块都只有一个lmc,这个lmc指向的分支块/叶子块中的所有索引键值列中的最大值一定小于该lmc所在分支块的所有索引键值列中的最小值: 2.索引分支块的行记录所对应的存储格式为"行头 + 分支块/叶子块的RDBA + col 0 + col 1",其中col 0为索引键值列,等于该行行头"分支块/叶子块的RDBA"所指向的叶子块中的第一行索

Oracle 索引监控(monitor index)

      合理的为数据库表上创建战略性索引,可以极大程度的提高了查询性能.但事实上日常中我们所创建的索引并非战略性索引,恰恰是大量冗余或是根本没有用到的索引耗用了大量的存储空间,导致DML性能低下.Oracle 提供了索引监控特性来初略判断未使用到的索引.本文描述如何使用Oracle 索引的监控.   1.冗余索引的弊端    大量冗余和无用的索引导致整个数据库性能低下,耗用了大量的CPU与I/O开销,具体表现如下:       a.耗用大量的存储空间(索引段的维护与管理)       b.增

数据-oracle 索引 求大神!!!

问题描述 oracle 索引 求大神!!! 有表emp,共有一百万行数据,但其中的emp.deptno列,数据只有4种不同的值,如10.20.30.40,其中有99万行对应着值10,5000行对应值20,3000行对应值30,2000行对应值40. 请问如果建立索引,让查询10外的其它deptno值搜索时,毫无疑问,如果索引能被应用, 解决方案 数据值比较少但记录较多,这种情况最高效的办法当然是对表分区,但100万其实也说不上多,直接对这个字段建索引问题也不大

Oracle 索引质量分析

      索引质量的高低对数据库整体性能有着直接的影响.良好高质量的索引使得数据库性能得以数量级别的提升,而低效冗余的索引则使得数据库性能缓慢如牛,即便是使用高档的硬件配置.因此对于索引在设计之初需要经过反复的测试与考量.那对于已经置于生产环境中的数据库,我们也可以通过查询相关数据字典得到索引的质量的高低,通过这个分析来指导如何改善索引的性能.下面给出了演示以及索引创建的基本指导原则,最后给出了索引质量分析脚本.   1.查看索引质量 --获取指定schema或表上的索引质量信息报告 gx_a