索引:
优点:提高查询的执行速度,实施数据的唯一性,加速了表之间的联系;
缺点:创建索引需要花费较多的时间,每个创建的索引连同原先的数据源都要空间来存储数据,每次修改数据时索引都要更新;
分类:
按 存储方式: B* 树 索引 、 位图索引;
按 索引个数: 单列索引 、 复合索引
按 引列值唯一性: 唯一索引、非唯一索引;
注意 : 默认为 B 树索引
B树索引:
以B 树结构(算法)组织数据并存放索引数据,B树是一颗 二叉树;
默认以升序排列,由根块、分支块 、叶块组成 。索引数据存储在叶块中;
语法:
Create Index 索引名 on table_name(列名);
如:create index index_name on emp(ename);
B树索引一般应建立在重复值很少的列上;并且经常在where 子句中引用 适用于相等查询和范围查询;
语法:
Create [ unique ] index index_name on table_name(column_name, column_name …) [ tablespace tablespace_name ];
其 中:
Unique 表示建立唯一性索引;
Tablespace_name :位于表空间的名称;默认当前用户的表空间;
位图索引:
位图索引 以位置来表示索引数据;相比 B树索引 ,位图索引可以节省大量的磁盘空间;
基于每个不同值建立一个位图;
语法:
Create BitMap index idx_name on table_name( con_name (列名) )
[ tablespace tablespace_name];
如:create bitmap index inx_emp on emp(ename);
一般位图索引建立在重复很多的列上; 或者建立在执行数据统计、数据汇总的条件查询列上;
函数索引:
一个字段上定义了索引后,如果在查询时使用了函数,则会使索引失效 ;可使用函数索引解决此问题;
语法:
Create index idx_name on table_name( func_name( 列名 ) );
如:create index func_index on emp substr(empno ,1 ,2)
修改索引:
语法: alter index idx_name rebuild;
删除索引
语法:drop Index idx_name;
查看索引:
语法:select idx_name , index_type , uniqueness from User_indexes where table_name =’emp’;
----------------------------------------------------------------------------------------------------------------
视 图
视图是一个虚拟的表; 它提供一种安全机制,保证只能检索和修改他们能看到的数据
复杂查询的使用也可以通过视图来简化;
视图的优点:
1、为用户提供相关的数据 提供一种安全机制;
2、隐藏数据复杂性;
3、从异构源组织数据 比如远程服务器和不是同一个数据库的表;
4、 减少对象的大小
创建视图;
语法: create view view_name as select 语句 [ with read only ];
With read only :只读视图;
如:create view view_name as select emp.* , dept,dname from emp , dept
Where emp.deptno = dept.deptno;
直接从视图中查询:
Select * from v_emp;
更新视图记录:
Create or replace view view_name as subquery;
撤销视图:
Drop view view_name;
----------------------------------------------------------------------------------------------------------------
序 列:
用于解决: 如何生成一个自动增长的列?
语 法:
Create sequence sequence_name
Increment by 1 每次增加1
Start with 100 从 100 开始增加
Maxvalue 1000 | nomaxvalue 最大值为1000 | 没有最大值
Minvalue 100 | nominvalue 最小值为100 | 没有最小值
[ cycle | nocycle ] 当 序列增加到最大值后 是否从头开始循环
[ cache 20 | nocache ] 缓存为20 | 没缓存
Noorder : 表示不排序
用法:
创建一个索引:create sequence xm_seq2 start with 100 increment by 1 maxvalue 500 nocycle cache 20;
创建一张表:create table xm_table (
fid number,
fname varchar2(20)
)
插入索引:
insert into xm_table values(xm_seq2.nextval, 'xiaoming');
Insert into xm_table values(xm_seq2.currval,’zhangsan’);
索引有连个序列值:
Nextval : 每取一次值 自动增加 1;
Currval : 取当前值,并不增加