Oracle 基础复习——索引
1.索引是做什么的?
回答: 索引是数据库中用来提高查询效率。
补充:?过多的建立索引会大大降低DML语句的效率,建立索引的原则是在经常作为查询条件的字段上建立??
??????????? 索引,在存在大量重复信息的字段上不适合建立索引。
注意:(以下情况索引失效)
?????????? 1)使用<>比较时,索引无效,建议使用< or >
????????? ?2)使用前置模糊匹配%时无效,用instr代替
???????? ? 3)使用函数时 (例:(create index ind… on 表名(to_char(birth,’’))建立这样的索引使用函
???????????????? 数时失效,但要注意查询语句的大小写)
????????? ?4)使用不匹的数据类型
???????? ??5)字段含有NULL索引会失效,建立索引的字段应该是NOT NULL
语法:
????????????-- 建立索引:
????????????CREATE INDEX? INDEX_ENAME ON EMP (ENAME)
?
????????????-- 如果在建立索引的过程中还可以对表进行DML操作,就在命令行上加online
????????????CREATE INDEX INDEX_SNAME ON DB_STUDENT(SNAME) [ONLINE]
?
????????????-- 经常做为联合查询的字段可以建立联合索引:
????????????CREATE INDEX INDEX_EMP_SAL_JOB ON EMP(SAL,JOB)
?
????????????-- 删除索引:
????????????DROP INDEX INDEX_HIREDATE
?
2.聚簇索引:
?????????聚簇是把关系列放在同一个地方,聚簇索引一般建立在关联表上的,用来提高根据关联字段查询的效率
步骤:
?????????? 1)先建立聚簇
?????????? 2)在建立表的同时将关联字段交给聚簇管理
?????????? 3)在该聚簇上建立索引
语法:
????????? -- 创建聚簇
????????? create cluster cluster_deptno(deptno number(3));
?
??????????-- 建立表的时候将指定字段放在聚簇里
????????? create table dept
????????? (
??????????? ? deptno number(3) ,
????????????? dname? varchar2(32)
????????? )
?????????cluster cluster_deptno(deptno);
???????? alter table dept add constraint pk_dept_deptno primary key (deptno);
??????? ?create table emp
???????? (
???????????? ?empno number(5) primary key,
????????????? ename varchar2(32),
???????????? ?age?? number(3),
????????????? sal number(5),
????????????? deptno number(3) references dept(deptno)
????????? )
?
????????? -- 外键必须建在聚簇之前
????????? cluster cluster_deptno(deptno)
?
????????? -- 将索引建立在聚簇上(即建立聚簇索引)
????????? create index cindex_deptno on cluster cluster_deptno;
?
????????? -- 删除聚簇
????????? drop cluster cluster_deptno
3.反向索引:通常建立在由序列生成字段信息的字段上
??????????????????? create index INDEX_STU_SNO on DB_STUDENT (sno)? reverse;
未完待续~
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。