您的位置:首页 > 数据库 > Oracle

oracle 索引

2013-10-03 10:24 211 查看
索引是一种与表相关的、可选的结构,用于加速对表的访问。当用户访问表中的数据时,oracle从索引中找到数据的指针,然后根据指针指向的位置从表中直接取得数据,索引可以减少磁盘I/O,加速数据访问速度。索引由oracle自动维护,无需用户的干预。
唯一性索引(Unique Indexes)和非唯一性索引(Nonunique Indexes),唯一性索引能确保索引列不会出现重复值。
通常索引都是由一列组成,而复合索引由多个索引列组成。
索引的分类
1,二叉树索引(B树索引),是使用最多的一种索引,在默认情况下,我们创建的索引都是B树索引,基于二叉树原理。
2.二叉树聚簇索引(B-tree Cluster Indexes),主要用于聚簇。
聚簇:如果一组表有一些共同的列,则将这样一组表存储在相同的数据库块中;聚簇还表示把相关的数据存储在同一个块上。利用聚簇,一个块可能包含多个表的数据。概念上就是如果两个或多个表经常做链接操作,那么可以把需要的数据预先存储在一起。聚簇还可以用于单个表,可以按某个列将数据分组存储。
3. 哈希聚簇索引(Hash Cluster Indexes) 主要用于哈希聚簇
4.反向索引(Reverse Key Indexes)反向索引页属于B树索引,它把索引值按字节反转过来。
5. 位图索引(Bitmap Indexes)指通过位图对索引进行管理,位图索引适合唯一值很少的列,也就是重复值很多的列。
6.基于函数的索引(Function-Based Indexes) 如果在SQL语句的where子句中经常用到函数或者表达式,则可以创建基于函数的索引。
创建索引
create index index_name on ct(name);--在表ct的列name上创建索引ind_name4
create UNIQUE INDEX ind_name on ct(name) tablespace userdb;
create BITMAP INDEX ind_id on ct(id);
create INDEX ind_name3 on ct(name) REVERSE;
create INDEX ind_name2 on ct(UPPER(name));
select owner,index_name from dba_indexes;--查询数据库中有哪些索引(sys用户)
SQL> select owner,index_name from dba_indexes where owner='ITEM';

OWNER INDEX_NAME
------------------------------ ------------------------------
ITEM IND_NAME
ITEM IND_ID

alter INDEX INDEX_ID REBUILD tablespace mytablespce;--把索引移动到另一个表空间
select index_name,tablespace_name from dba_indexes where index_name ='index_id';---查看索引所在的表空间。
如果索引因为某些原因无效或者因为很长时间没有维护而产生过多的索引碎片(index fragement)需通过重建索引来消除索引碎片,
analyze index INDEX_NAME validate structure;---对索引进行分析
select height,(DEL_LF_ROWS_LEN/LF_ROWS_LEN)*100 from INDEX_STATS WHERE NAME='INDEX_NAME';--从视图 index_stats中获得索引的统计信息
DEL_LF_ROWS表示索引删除行数,LF_ROWS表示索引总行数, height表示二叉树的深度。
若满足下列的其中一个,则要考虑重建索引:
1,(DEL_LF_ROWS_LEN/LF_ROWS_LEN)*100 大于20,;
2,height的值大于4。
使用alter index index_id rebuild;命令重建索引index_id。

删除索引

drop index ind_name;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: