索引是为了更快的检索数据,就是为了更快的查找,在表里面的数据量比较大的时候,查找一条记录会花费大量的时间,其中,唯一
索引可以保证表里数据的唯一性.
索引主要有以下作用:
-
索引是的检索数据的速度大大加快
-
创建索引时自动添加了唯一性约束,通过使用唯一性索引可以保证数据库表中每一行数据的唯一性.
-
通过索引可以加快表与表之间连接, 使得在数据库中进行多表连接查询是速度明显增强.
-
使用索引后,在分组和排序字句进行数据汇总时,可以显著的减少查询分组和排序的时间.
索引需要在表基础上创建,需要占用额外的物理空间,而且对表进行修改是,比如修改删除数据时,需要进行动态维护. 需要注意的时,在实际生产中,如果给以存在表添加索引需要注意,如果表里面的
数据梁比较大的时候, 建索引的时间会很长, 会占用很多数据库的资源,已经比较
重要的表或者增加删除修改数据比较频繁的表,需要注意,不然可能出问题.
索引分类
一. 按照索引列划分
- 单列索引, 基于但个列所创建的索引,只是最简单的索引创建方式.
- 多列索引, 又称为复合索引或组合索引,可以称为拼接索引(concatenated index), 索引基于数据表的多个列而创建.
二. 按照索引值的唯一性划分 - 唯一性索引, 索引列值不能重复的索引,比如一些具有unique约束的索引.
- 非唯一性索引, 索引列之可以重复的索引.
三. 按照索引的功能结构上来划分 - B* 树索引, Oracle 默认使用的索引,索引按照平衡二叉树结构组织并存放索引数据, 索引可以时单列索引或复合索引 , 唯一索引或非唯一索引
- 位图索引, 为索引列的每个去之创建一个位图( bit 位, 而非图片), 对表中的每行使用1位(bit 取值为0或者1) 来表示改行是狗包含该位图的索引的去之.
- 函数索引,索引的去之不直接来自列, 而是来自包含列的汉书或者表达式,这就是函数索引。
分析索引
ANALYZE INDEX 索引名 VALIDATE STRUCTURE;
SELECT name, height FROM INDEX_STATS; --查询索引的高度值
SELECT index_name, blevel, num_rows FROM user_indexes WHERE table_name = '表名';
创建索引
CREATE [UNIQUE] | [BITAMP] INDEX index_name --创建索引
ON table_name ([column1 [ASX | DESC], column1 [ASX | DESC], ... ] | [express] ) --指定索引所在的表和索引列排序方式
[TABLESPACE tablespace_name] --索引存储的表空间
[PCTFREE n1] --空闲空间比率
[STORAGE (INITIAL n2)] --储存参数设置
[NOLOGGING] --是否产生重做日志
[NOLINE] --是否创建或重建是允许DML操作
[NOSORT]; --显示指定不对索引列进行排序
UNIQUE,表示唯一索引
BITMAP, 表示位图索引
PCTFREE,用于指定为将来的INSERT操作预留的空闲空间的百分壁纸,与数据快的PCTFREE的作用比较相似。对于经常插入的数据的表,应该为表中索引指定一个比较大的空闲空间。
STORAGE
ONLINE,表示在创建或重建索引是,允许对表进行DML操作。默认情况下,不适用该选项。
一般来说,创建索引将完成如下的几个步骤
1、对全表进行扫描,收集索引数据。
2、岁索引的数据进行排列,为索引分配储存空间。
3、将索引的定义信息保存到数据字典中。
创建函数索引
CREATE INDEX 索引名 ON 表名(列1+列2);
修改索引
ALTER INDEX [snhema. ] index --指定要修改的索引名称
{ { deallocate_unused_clause --回收未使用的索引空间的字句
| allocate_extent_clause --为索引分配新的段的字句
| shrink_clause --压缩索引段的字句
| parallel_clause --指定并行度字句,可以加速索引的创建速度
| physical_attributest_cluse --更改索引的物理储存参数
| logging_clause --是否为索引添加重做日志内容
} ...
| rebulid_clause --指定重建索引的句子
| PARAMETERS ( 'ODCI_parameters') --索引的ODCI参数设置
| COMPILE --用来重新编译一无效的应用域索引
| { ENABLE | DISABLE } --仅对函数索引有用,她用于启用或禁用函数索引
| UNUSABLE --指定索引不可用,这会立即释放索引占用的空间
| VISIBLE | INVISIBLE --指定索引对优化器是否课件或不可见
| RENAME TO new_name --重命名索引
| COALESCE --命并索引内容
| { MONITORING | NOMONITORING } USAGE --监视索引的使用性
| UPDATE BLOCK REFREENCES --仅对索引组织表上的标准或应用索引域有用
| alter_index_partitioning --修改索引分区
}