Oracle数据库中索引的维护

QQQQQueenN

QQQQQueenN

2016-01-29 14:48

Oracle数据库中索引的维护,Oracle数据库中索引的维护
  本文只讨论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 owner=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)手工测量索引的选择性

  如果要根据一个表的两列创建两列并置索引,可以用以下方法测量索引的
展开更多 50%)
分享

猜你喜欢

Oracle数据库中索引的维护

电脑网络
Oracle数据库中索引的维护

Oracle 数据库中创建合理的数据库索引

编程语言 网络编程
Oracle 数据库中创建合理的数据库索引

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle DBA数据库日常维护完全手册

编程语言 网络编程
Oracle DBA数据库日常维护完全手册

Oracle数据库数据对象分析(中)

编程语言 网络编程
Oracle数据库数据对象分析(中)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在Oracle数据库中按用户名重建索引的方法

编程语言 网络编程
在Oracle数据库中按用户名重建索引的方法

为什么有时Oracle数据库不用索引来查找数据?

编程语言 网络编程
为什么有时Oracle数据库不用索引来查找数据?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

在MySQL中增添新用户权限的方法简介

在MySQL中增添新用户权限的方法简介

Sphinx+MySQL全文检索架构和安装过程

Sphinx+MySQL全文检索架构和安装过程
下拉加载更多内容 ↓