Oracle 数据库索引优化相关知识(创建、删除、查看)

 Oracle数据库创建索引一般分为在线索引和非在线索引,在线与非在线的区别:非在线锁表,优先创建索引,此时DML都被阻塞,所以快;相反,在线锁的是行而非表,通过临时表进行索引的创建,所以不会影响DML操作,但副作用就是慢。   

  在生产环境操作,不停服务的话,会导致创建索引期间仍有DML操作进来。另外如果是大表,那么采用非在线而导致锁表所带来的影响可能会很大。因此,生产环境不停服的脚本操作,建议使用online。

创建索引的作用

1)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

2)可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

3)可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

4)使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

5)通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能

应该建索引列的特点:

1)在经常需要搜索的列上,可以加快搜索的速度;

2)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

3)在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;

4)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围 是连续的;

5)在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

6)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度

(一)创建非在线索引:

CREATE UNIUQE | BITMAP INDEX <schema>.<index_name> ON <schema>.<table_name>

UNIQUE | BITMAP:指定 UNIQUE为唯一值索引, BITMAP为位图索引,省略为 B-Tree索引

TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高)

(二)创建在线索引。

create index indx_LOT_EXT on LOT_EXT (lot_rrn, from_workorder_id) online tablespace TBS_MYCIM_INDEX ;

(三)删除索引。

DROP INDEX 索引名;

(四)查看某个表的索引,表名需大写。

SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = ‘表名’

(五)查看某个表哪些列有索引。

SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = ‘表名’


数据运维技术 » Oracle 数据库索引优化相关知识(创建、删除、查看)