oracle索引的事

来源:互联网 发布:银河证券软件手机版 编辑:程序博客网 时间:2024/05/17 03:54

索引是一种可选的与表相关的数据库对象,可以用于提高数据的查询效率。索引是建立在表列上的数据库对象,但是无论其物理结构还是逻辑结构均不依赖于表。数据库中引入索引的目的是提高对表中数据的查询速度。如果一个表没有建立索引,则对该表进行查询时会进行全表扫描。如果表中有索引,则在条件查询时数据库系统优先对索引进行查询。索引可以提高查询效率的原因是索引结构中保存了索引值及其相应记录的物理地址ROWID,并按照索引值进行排序。使用索引查询时,先根据条件中的索引值查询有序索引结构中对应的ROWID,再根据ROWID查询表中的数据。

根据索引值是否唯一,分为唯一性索引和非唯一性索引,这两种索引的索引值允许为NULL。默认情况下oracle创建的索引是非唯一性索引。当表中存在主键约束或唯一性约束的时候,oracle会自动在相对应的列上创建唯一性索引。

根据索引的组织结构不同,可以分为平衡树(B树)索引和位图索引。B树索引占用空间多,适合索引值基数高、重复率低的应用。B树索引包括唯一性索引、非唯一性索引、反键索引、单列索引、复合索引等多种索引。位图索引是引用图的广度优先搜索遍历的二维数组结构,这种索引结构占用空间小,适合索引值少重复率高的应用。

根据索引基于列数的不同,可以分为单列索引和复合索引。


索引的使用原则:

1.导入数据之后再创建索引

2.在适当的表和列上创建适当的索引

1).经常查询的数据少于表记录总数的5%应设置索引
2).经常连接查询,可在连接列上建立索引提高速度
3).取值范围很大的列使用B树索引
4).取值范围很小的列使用位图索引
5).不能再取值范围极大的数据类型上设置索引,例如Long,Blob等
6).oracle会在主键约束和唯一性约束的列上创建索引

3.合理设置复合索引中列的顺序,使用频率高的列靠前

4.限制表中的索引数目,索引越多查询越快更新越慢

5.为索引设置合适的PCTFREE参数,特别是对于插入数据频繁的表

6.选择存储索引的表空间,索引和表同表空间利于维护,索引和表不同表空间利于存取性能提升


创建索引的SQL语法:

create [unique] [bitmap] index index_name on table_name([column_name[ASC|DESC],...]|[expression])

 [reverse] [parameter_list]


修改索引的语法

alter index index_name coalesce;//合并索引

alter index index_name rebuild;//索引重建

alter index index_name_old rename to index_name_new;//索引重命名


索引监听

alter index index_name monitoring usage;//打开监听状态,可以在V$OBJECT_USAGE中看到

alter index index_name nomonitoring usage;//关闭监听状态


删除索引

删除需要考虑以下几种情况:

1.索引不再使用

2.通过监听发现索引使用频率很低

3.索引中碎片过多或者含有损坏数据,先删除再重建

4.移动表数据导致索引失效

删除语法: drop index index_name;

原创粉丝点击