Oracle序列有两个作用
1、提供主键和唯一键约束:外键约束在父表中定义了,所以在子表中不是必须的,但是出于性能的考虑,通常也在子表中的外键约束列建立索引;
2、提高系统的系能:语句中有where子句、语句中带有排序操作,语句中带有表连接的操作
索引的类型:
B*Tree Index:默认类型,当一个表很大,而查询的数据只占表全部数据中很小的一部分的时候,这种索引很有效;
bitmapindex:
B*Tree Index:
通常,如果一个查询需要取出的数据超过全表数据的2%--4%,那么全表扫描会更快;
还有一种特殊的对NULL值的检索会用到全表扫描,因为NULL值不会进入B树索引,如:
select * from emp where last_name is null; ---这条语句将使用全表扫描;
对B树索引应用场合的定义:
列中的候选对象比较多,表有很多的行,使用了where子句和JOIN条件;
B树索引不太适合数据仓库的应用;
位图索引
位图索引可以对null值进行
对位图索引应用场合的定义:
列中的候选对象比较少,表中有很多的行,对表的操作经常使用布尔逻辑;
索引类型选项
- unique or nonunique
- reverse key:有效的将索引键分散开;
- compressed:重复的索引键值只存储一次;
- composite
- function based
- ascending or descending
这六个选项对B树索引都可以使用,但是只有最后三项可以对位图索引使用;
thedafault type of indexx is a nonunique, noncompressed, non-reverse key B*Treeindex
itis not possible to create a uniquebitmap index;
建立索引
--创建索引
CREATE UNIQUE INDEXdept_i1 ON detp(deptno);
CREATE UNIQUE INDEXemp_i1 ON emp(empno);
CREATE INDEX emp_i2ON emp(first_name,last_name);
CREATE BITMAP INDEXemp_i3 ON emp(deptno);
ALTER TABLE dept ADDCONSTRAINT dept_pk PRIMARY KEY(deptno);
ALTER TABLE emp ADDCONSTRAINT emp_pk PRIMARY KEY(empno);
ALTER TABLE emp ADDCONSTRAINT emp_fk FOREIGN KEY(deptno) REFERENCES dept(deptno);
修改和删除索引
ALTER INDEX主要被管理员使用来调整索引的物理属性,不能被用来调整索引的逻辑属性
如果想修改一个索引,请先删除,然后重建:
drop index emp_i2;
createindex emp_i2 on emp(first_name,last_name, dob);
当表被删除的时候,建立在表之上的约束条件和索引也一并删除;
如果索引在创建约束条件是隐式创建的,删除约束条件的同时,索引也自动删除
显示创建的索引将不会被删除;