`

Oracle数据库中索引的维护(1)

阅读更多

本文只讨论Oracle中最常见的索引,即是B-tree索引。本文中涉及的数据库版本是Oracle8i。

一. 查看系统表中的用户索引
在Oracle中,SYSTEM表是安装数据库时自动建立的,它包含数据库的全部数据字典,存储过程、包、函数和触发器的定义以及系统回滚段。
一般来说,应该尽量避免在SYSTEM表中存储非SYSTEM用户的对象。因为这样会带来数据库维护和
管理的很多问题。一旦SYSTEM表损坏了,只能重新生成数据库。我们可以用下面的语句来检查在SYSTEM表内有没有其他用户的索引存在。
select count(*)
from dba_indexes
where tablespace_name = 'SYSTEM'
and owner not in ('SYS','SYSTEM')
/
二. 索引的存储情况检查
Oracle为数据库中的所有数据分配逻辑结构空间。数据库空间的单位是数据块(block)、范围(extent)和段(segment)。
Oracle 数据块(block)是Oracle使用和分配的最小存储单位。它是由数据库建立时设置的DB_BLOCK_SIZE决定的。一旦数据库生成了,数据块的大小不能改变。要想改变只能重新建立数据库。(在Oracle9i中有一些不同,不过这不在本文讨论的范围内。)
Extent是由一组连续的block组成的。一个或多个extent组成一个segment。当一个segment中的所有空间被用完时,Oracle为它分配一个新的extent。
 
Segment是由一个或多个extent组成的。它包含某表空间中特定逻辑存储结构的所有数据。一个段中的extent可以是不连续的,甚至可以在不同的数据文件中。
一个object只能对应于一个逻辑存储的segment,我们通过查看该segment中的extent,可以看出相应object的存储情况。
(1)查看索引段中extent的数量:
select segment_name, count(*)
from dba_extents
where segment_type='INDEX'
and wner=UPPER('&owner')
group by segment_name
/
(2)查看表空间内的索引的扩展情况:
select
substr(segment_name,1,20) "SEGMENT NAME",
bytes,
count(bytes)
from dba_extents
where segment_name in
( select index_name
from dba_indexes
where tablespace_name=UPPER('&表空间'))
group by segment_name,bytes
order by segment_name
/
三. 索引的选择性
索引的选择性是指索引列中不同值的数目与表中记录数的比。如果一个表中有2000条记录,表索引列有1980个不同的值,那么这个索引的选择性就是1980/2000=0.99。
一个索引的选择性越接近于1,这个索引的效率就越高。
如果是使用基于cost的最优化,优化器不应该使用选择性不好的索引。如果是使用基于rule的最优化,优化器在确定执行路径时不会考虑索引的选择性(除非是唯一性索引),并且不得不手工优化查询以避免使用非选择性的索引。
确定索引的选择性,可以有两种方法:手工测量和自动测量。
(1)手工测量索引的选择性
如果要根据一个表的两列创建两列并置索引,可以用以下方法测量索引的选择性:
列的选择性=不同值的数目/行的总数 /* 越接近1越好 */
select count(distinct 第一列||'%'||第二列)/count(*)
from 表名
/
如果我们知道其中一列索引的选择性(例如其中一列是主键),那么我们就可以知道另一列索引的选择性。
手工方法的优点是在创建索引前就能评估索引的选择性。
(2)自动测量索引的选择性
如果分析一个表,也会自动分析所有表的索引。
第一,为了确定一个表的确定性,就要分析表。
analyze table 表名
compute statistics
/
第二,确定索引里不同关键字的数目:
select distinct_keys
from user_indexes
where table_name='表名'
and index_name='索引名'
/
第三,确定表中行的总数:
select num_rows
from user_tables
where table_name='表名'
/
第四,索引的选择性=索引里不同关键字的数目/表中行的总数:
select i.distinct_keys/t.num_rows
from
user_indexes i,
user_tables t
where i.table_name='表名'
and i.index_name='索引名'
and i.table_name=t.table_name
/
第五,可以查询USER_TAB_COLUMNS以了解每个列的选择性。
表中所有行在该列的不同值的数目:
select
column_name,
num_distinct
from user_tab_columns
where table_name='表名'
/
列的选择性=NUM_DISTINCT/表中所有行的总数,查询USER_TAB_COLUMNS有助测量每个列的选择性,但它并不能精确地测量列的并置组合的选择性。要想测量一组列的选择性,需要采用手工方法或者根据这组列创建一个索引并重新分析表。

分享到:
评论

相关推荐

    Oracle数据库中索引的维护

    Oracle数据库中的索引维护是数据库管理员日常工作中至关重要的一部分,尤其是在大型企业级应用中,高效的索引管理能够显著提升查询性能和数据库的整体效率。本文主要关注Oracle8i版本中的B-tree索引维护。 首先,...

    Oracle数据库索引的维护

    本文将从Oracle数据库索引的基础概念出发,深入探讨索引维护的重要性和具体方法。 #### 一、Oracle数据库索引概述 索引是数据库中一种用于快速查找数据的数据结构。在Oracle数据库中,最常用的索引类型是B树索引...

    关于Oracle数据库中索引的维护

    在Oracle数据库中,索引是一种关键的...总之,维护Oracle数据库中的索引涉及监控索引的存在位置、存储状况以及选择性,这些因素都直接影响数据库的性能和查询效率。定期检查和优化索引是确保数据库高效运行的关键步骤。

    基于Oracle数据库的索引优化.pdf

    在Oracle数据库中,索引的优化是一个复杂的过程,需要考虑多个因素,如数据量、查询模式、索引类型等。索引的优化不仅可以提高数据库的性能,还可以降低数据库的维护成本。 索引优化是Oracle数据库性能优化的关键。...

    oracle 数据库日常维护手册

    以下是 Oracle 数据库日常维护手册中的一些重要知识点: 检查数据库基本状况 在日常维护中,需要定期检查 Oracle 实例的状态,包括检查 Oracle 服务进程、监听状态、系统和 Oracle 日志文件等。通过检查这些信息,...

    oracle数据库管理与维护技术手册.pdf

    1. **Oracle数据库基础**:Oracle数据库基于SQL语言,提供数据存储、检索和管理服务。其核心组件包括数据文件、控制文件、重做日志文件、参数文件等,这些组件共同确保数据的完整性和一致性。 2. **安装与配置**:...

    oracle、sql数据库批量建索引

    "iTelluro.Tools.SqlIndex"这个工具很可能是一个帮助管理和优化数据库索引的实用程序,可能提供了图形化界面或API,使得在Oracle和SQL Server之间进行索引的批量创建和删除变得更加便捷。使用这样的工具,可以大大...

    oracle数据库管理与维护技术手册 下

    Oracle数据库管理与维护技术是IT领域中的核心技能之一,尤其对于数据库管理员(DBA)而言,精通Oracle系统是必备的专业素养。"Oracle数据库管理与维护技术手册 下"是一本深入探讨Oracle数据库操作、管理和优化的专业...

    关于ORACLE数据库中索引的几点讨论.pdf

    总的来说,Oracle数据库中索引的使用是一门深奥的艺术,需要平衡查询效率、存储成本和维护工作。通过对索引的深入理解和合理配置,可以显著提升数据库的性能和响应速度,为企业信息系统提供更高效的服务。

    oracle数据库管理与维护技术手册.rar

    本手册将深入探讨Oracle数据库的管理与维护技术,帮助读者掌握在实际环境中操作和优化Oracle系统的必备技能。 一、Oracle数据库架构 Oracle数据库采用多层架构,包括服务器进程、后台进程、数据文件、控制文件、...

    oracle数据库日常维护手册

    在Oracle数据库的日常维护中,确保数据库的基本状况良好是首要任务。这包括检查Oracle实例状态、Oracle服务进程和Oracle监听状态。 ##### 1.1 检查Oracle实例状态 通过执行SQL命令`select instance_name, host_...

    Oracle数据库中的索引管理技术.pdf

    Oracle数据库中的索引管理技术 索引是 Oracle 数据库中的一个重要对象,它可以大大提高数据库中的数据检索速度。索引是包含表中选定字段的信息的对象,这些信息以某种规律排序,有一个指针指向存放实际数据的记录。...

    Oracle数据库维护培训

    在Oracle数据库维护培训中,有几个关键概念和技术是重点学习的内容,主要包括基础表空间、数据文件、Undo和Temp表空间。 1. **表空间(Tablespaces)**: 表空间是Oracle数据库中数据组织的主要逻辑单元,它充当了...

    ORACLE数据库 ORACLE数据库

    Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,由美国甲骨文公司(Oracle Corporation)开发和维护。Oracle数据库以其高效、稳定和强大的功能在金融、电信、医疗、政府等多个领域得到广泛应用。本篇...

    医院Oracle数据库的日常维护与优化方法.pdf

    Oracle数据库在医院信息系统中的应用非常广泛,为确保数据库的稳定运行和安全性,日常维护和优化是非常重要的。本文将从医院Oracle数据库的日常维护和优化方法入手,对Oracle数据库的日常维护和优化方法进行分析,...

    专家精讲:Oracle数据库管理与维护 完整版 (第三部)

    详细介绍Oracle数据库系统的运作原理与组成架构;针对常用的“基本对象”及延伸应用的“高可用性对象”提供详尽说明;详解Oracle数据库的安装、建置,以及安全认证方式;深入剖析Oracle的网络联机架构与设定,包含...

    浅谈oracle中重建索引

    索引是Oracle数据库中优化查询性能的关键工具之一。然而,随着数据的不断变化,索引的效率可能会逐渐下降。定期对索引进行分析和重建是维持高性能数据库系统的必要手段。通过合理地使用Oracle提供的索引管理工具和...

    ORACLE数据库设计与优化

    《ORACLE数据库设计与优化》 Oracle数据库是全球广泛使用的大型关系型数据库系统之一,它在数据存储、处理和管理方面具有强大的...理解这些核心概念并灵活应用,将有助于构建高效、稳定且易于维护的Oracle数据库系统。

    专家精讲:Oracle数据库管理与维护 完整版(第2部分)

    详细介绍Oracle数据库系统的运作原理与组成架构;针对常用的“基本对象”及延伸应用的“高可用性对象”提供详尽说明;详解Oracle数据库的安装、建置,以及安全认证方式;深入剖析Oracle的网络联机架构与设定,包含...

Global site tag (gtag.js) - Google Analytics