一、索引
1.索引的分类及语法
1).B-TREE索引 BALANCE-TREE
(ORACLE的默认索引类型,工作中最常见、使用范围最广的索引)
语法:
CREATE INDEX IND_NAME ON TB_NAME(COL_NAME);
create index ind_name'索引名' on tb_name'表名'(col_name)'字段名'
2).位图索引 (位图+ROWID)
说明:位图索引在创建时,会扫描整张表,为索引列的每个取值建立一个不重复的位图(BITMAP)来描述该取值
语法:
CREATE BITMAP INDEX IND_NAME ON TB_NAME(COL_NAME);
适用场景:列基数比较小的时候使用(性别、婚姻状况)
3)反向键索引(简称:反向索引)
说明:可以视作一种特殊的B-TREE索引,存储索引列的反向值
背景:为防止B-TREE索引在某叶上数据量占比过高而使用的一种索引
语法:
CREATE INDEX IND_NAME ON TB_NAME(COL_NAME) REVERSE;
适用场景:原始数据分支不明显但反向数据分支明显的列(身高:集中在一米七一米八)
4)基于函数的索引
说明:可以视作一种特殊的B-TREE索引,存储函数处理后的数据
背景:在某个字段上以原值建立了索引,但是在筛选时在该字段上经常加函数,导致索引无法生效
语法:
CREATE INDEX IND_NAME ON TB_NAME(FUNCTION(COL_NAME));
适用场景:对某列进行筛选时经常需要配合函数使用(例如查找姓名中的首字母)
2.按唯一性(索引列中的数据是否有重复值)
1.唯一索引 --索引列中不可能出现重复值
语法:
CREATE UNIQUE INDEX IND_NAME ON TB_NAME(COL_NAME);
注意点:
1)B-TREE索引可以建立唯一索引,位图索引不能建立唯一索引
2)如果在某列上建立了唯一约束或主键约束,ORACLE会自动在该列上建立一个同名的唯一索引
2.非唯一索引 --索引列中可能出现重复值
语法:
CREATE INDEX IND_NAME ON TB_NAME(COL_NAME);
3.按列的个数(索引覆盖的列的个数)
1.单列索引 --基于一个列建立的索引
语法:
CREATE INDEX IND_NAME ON TB_NAME(COL_NAME);
2.复合索引(也称为联合索引) --基于两个或两个以上列建立的索引
语法:
CREATE INDEX IND_NAME ON TB_NAME(COL_NAME1,COL_NAME2...);
4.索引的删除
语法:
drop index ind_name
5.索引的禁用和重建
禁用索引的语法:
ALTER INDEX IND_NAME UNUSABLE;
重建索引的语法:
ALTER INDEX IND_NAME REBUILD;
注意!
【插入完成后统一维护索引】比【一边插入一边维护】的速度要快
二、视图
1.定义
视图是将SQL查询语句的结果动态保存到数据库中的一张虚拟表
定义解读:
1)视图可以像普通的事实表一样去使用
2)视图本身不存储数据,它只是动态地获取表的查询结果
权限要求:GRANT CREATE VIEW TO USERNAME;
2.语法
语法:
CREATE [OR REPLACE] VIEW V_viewname [(别名1,别名2...)] AS
SQL语句
[WITH CHECK OPTION] --检查 --可读写视图
[WITH READ ONLY] ; --只读
基表:视图的来源表
3.视图删除
语法:
drop view v_name