索引是与表相关的一个可选结构
用以提高 SQL 语句执行的性能
减少磁盘I/O
使用 CREATE INDEX 语句创建索引
在逻辑上和物理上都独立于表的数据
Oracle 自动维护索引
--联想新华字典去理解记忆

--创建表并制定存储的表空间
create table stu
(
sno number,
sname varchar2(20)
)
tablespace tsm;

--创建标准索引
create index index_student --index_student 索引名称
on student(address) --索引关联的表以及字段
tablespace tsm; --索引存放位置

--重建索引
ALTER INDEX index_student rebuild;

--删除索引
drop index index_student;

--唯一索引
select * from emp;

--唯一索引确保在定义索引的列中没有重复值
--Oracle 自动在表的主键列上创建唯一索引
--使用CREATE UNIQUE INDEX语句创建唯一索引
create unique index uq_index
on emp(ename)
--没有加表空间的时候,默认的就是放置与表存放的位置相同

--组合索引
create index com_index
on emp(ename,job)
--基于多个字段创建的索引

--反向键索引
反向键索引反转索引列键值的每个字节
通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上
创建索引时使用REVERSE关键字
create index rev_index
on emp (mgr) reverse;

alter index rev_index rebuild noreverse;

select empno,rowid from emp;

--位图索引
位图索引适合创建在低基数列上
位图索引不直接存储ROWID,而是存储字节位到ROWID的映射
减少响应时间
节省空间占用
create bitmap index bit_index
on emp(hiredate);

--索引组织表 ORGANIZATION INDEX
CREATE TABLE ind_org_tab (
vencode NUMBER(4) PRIMARY KEY,
venname VARCHAR2(20)
)
ORGANIZATION INDEX;

insert into ind_org_tab values(111,'aaa');
insert into ind_org_tab values(222,'bbb');
insert into ind_org_tab values(333,'ccc');
--基于主键查找,不是基于rowid查询
select vencode,rowid from ind_org_tab;
普通表 索引组织表
ROWID 唯一地标识行 主键唯一地标识行
隐式的 ROWID 列 没有隐式的 ROWID 列
基于 ROWID 的访问 基于主键的访问
顺序扫描返回所有行 完全索引扫描返回所有行,并按主键顺序排列
支持分区 不支持分区

--基于函数的索引
select * from emp;

create index lower_index
on emp(lower(ename));

--查询索引
select * from USER_INDEXES;
--USER_IND_PARTITIONS - 用户创建的分区索引的信息
select * from user_ind_partitions;
--USER_IND_COLUMNS 查看在哪些表的字段上面创建了索引
select * from user_ind_columns;