1.索引
索引类似于书的目录,可以提高查询效率。但它并不是在所有情况下都会优化查询,它是在大量数据查询时,每次查询的数据量在表的总数据量30%以下时,会提高效率。由于索引会降低添加和修改的执行效率,所有一般是给增删改操作比较少表上建立。
单列索引:给某个列建一个索引,叫单行索引
联合索引:给多个列建一个索引,叫联全索引,如果联合索引,在查询时,使用了第一个索引列作为条件,那么它会使用索引提高查询效率,如果使用了非第一个索引列作为条件,它不会使用索引。
--创建索引 create index index_name on table_name(col_name[,col_name]); create index:index索引关键字 index_name:索引名称 table_name:表名 col_name:索引列名 --给ename列建立索引 create index ind_emp_name on emp(ename); --使用索引列作为查询条件时,不要在索引列上进行数学运算 create index ind_emp_sal on emp(sal); select * from emp where sal*12>10000; --这样写条件不会使用索引 select * from emp where sal>10000/12; --这样它就会使用索引 --删除索引: drop index 索引名; drop index ind_emp_sal; drop index ind_emp_name;
2.视图
视图通过定制的方式显示来自一个或多个表的数据,可以视为“虚拟表”或“存储的查询”,创建视图所依据的表称为“基表”。
视图的优点有:提供了另外一种级别的表安全性、隐藏的数据的复杂性、简化的用户的SQL命令、隔离基表结构的改变、通过重命名列,从另一个角度提供数据
--创建视图 CREATE [OR REPLACE] [FORCE] VIEW view_name [(alias[, alias]...)] AS select_statement [WITH CHECK OPTION] [WITH READ ONLY]; create view:view视图关键字 OR REPLACE:如果视图已经存在,则替换旧视图。 FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。 view_name:视图名称,符合标识符命名规范 别名:别名的数量要和后面的查询语句的列相同 WITH CHECK OPTION 子句可以保证让你只能在视图的条件之内对视图进行DML WITH READ ONLY:表示是一个只读视图 --例如: create view view_dept_emp as select e.*,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno; --视图的使用: select * from view_dept_emp; --删除视图 DROP VIEW 视图名称;
3.序列
序列是Oracle中自动生成一个序列的对象,一般用来生成表的主键的值
--创建序列语法: create sequence sequence_name start with startValue increment by inrValue minvalue minValue maxvalue maxValue cache|nocache cycle|no cycle create sequence:sequence序列关键字 sequence_name:序列名称,符合标识符命名规范 start with satrtValue:指定序列的初始值,startValue是一个自然数 increment by inrValue:指定序列的值每次增加多少,inrValue 是一个自然数 一般用1 minvalue minValue:指定序列的最小值 minValue是一个自然数据 maxvalue maxValue:指定序列的最大值 maxValue是一个自然数据 cache|no cache:指定序列缓存,默认缓存20个 cycle|no cycle:指定序列是否循环生成 --创建一个序列 create sequence my_seq start with 1 increment by 1; --序列的两个属性 nextval:取序列的值,并且序列的值增加 currval:取序列的当前值,序列值不会变 --序列名.属性 select my_seq.nextval from dual; select my_seq.currval from dual; --不能直接取当前值 insert into 表名 values(my_seq.nextval,'值','值'); --使用ALTER SEQUENCE语句修改序列,不能更改序列的START WITH参数 ALTER SEQUENCE stu_seq MAXVALUE 5000 CYCLE; --使用DROP SEQUENCE语句删除序列 DROP SEQUENCE stu_seq;