索引
与表关联的可选结构;
快表,加快SQL;
减少磁盘I/O操作;
物理上索引存储在Oracle的文件上,称为索引表空间;
Oracle自动维护索引;
唯一值索引:定义在索引的列中没有重复的值;
Oracle自动为主键和唯一键列创建唯一索引;
create uinque index用于创建唯一索引;
//如果为某个表的某个列创建了唯一值索引,则即使这个列没有
唯一值约束,或者说主键不能重复的约束,也会被强制为不可重复
插入;因为索引是唯一值索引;
//注意,索引对表的作用是自动的,当你查询的时候,系统会
自动使用可用索引来提高速度,当你试图插入重复值的时候,
如果存在唯一值索引,就会自动阻止你;但是你不要试图象查询表一样
查询索引,索引只是后台的助手;
组合索引:连接索引;
在表的多个列上创建的索引;
组合索引的列可以按任意顺序排列;
对于在where子句中包含多个列的查询,可以提高速度;
因为索引已经把多个列组合在一起了哦!
例子:
scott>create index idx_empnoandeptno on emp(empno,deptno);
索引已创建。
scott>select * from emp where empno=7782 and deptno=10;
//注意,索引是自动被调用或者说使用的,当select语句执行的时候
自动用索引来检索;
反向键索引:
//普通的查询是全表扫描,而索引就可以让系统只扫描
查询列的索引,然后去扫描表的被选择行;
反转列中的每一个字节;
将数据插入操作分布在 整个索引上;
create reverse index;
//当某个列的值的前面几位都是一样的,只有后面的位有区别;
//当经常向表中添加数据,而不经常更新的时候;
位图索引:
bitmap index;
位图索引到底是干什么呀??
索引组织表:
表的数据和索引的数据存储在一起;
create table tablename(...primary key)
organization index;
其实索引是不存在的;
基于主键查询;
基于函数的索引:
其实很简单,就是用表的一个列的函数结果做索引;
同样,索引是在后台自动工作的;
当你再次使用那个索引创建时的函数查询表时,就会自动
调用已经用函数创建的索引,而不是从表中得到数据再用
函数计算;很显然,这加快了速度;
键压缩索引:用后缀项共享前缀项;compress;
分区索引:
索引存储在不同的分区中;
簇
有公共列的两个或者多个表的集合;
簇的表中的数据存储在公共的数据块中;
簇的表和普通表是一样的,只是多个表中的公共列
只存储了一份在公共的数据块中;
创建簇:
先创建簇,后创建组成簇的表;
create cluster;
插入数据的性能降低;
//在主键,外键关系表情况下用簇;