ORACLE对象-高级
一、视图
(一)什么是视图
视图和表的区别:
视图是实体表的映射,视图和实体表区别就是于视图中没有真实的数据存在。
视图中存储的是SQL语句
什么时候使用视图:
1.为了安全,通过视图,可以异常敏感数据,不对外开放,(你可以隐藏表中不想给别人看的数据)
2.保存复杂sql的查询结果,方便人员调用
注意:在企业中,你查询的对象(表)他可能不是一张的表,可能是视图;你看到的视图的字段可能也不是真实的字段。
(二)案例
1.视图的创建与使用
需求:创建视图 :业主类型为1的业主信息
语句:
create or replace view view_owners1 as
select * from T_OWNERS where ownertypeid=1
利用该视图进行查询
select * from view_owners1 where addressid=1;
删除视图
drop view name
使用视图就跟使用表一样。
二、序列
(一)什么是序列
序列是ORACLE提供的用于产生一系列唯一数字的数据库对象。
(二)创建与使用序列
创建序列语法:
CREATE SEQUENCE 序列名
[START WITH 起始数]
[INCREMENT BY 增长量]
[MAXVALUE 最大值]
[MINVALUE 最小值]
通过序列的伪列来访问序列的值
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
注意:我们在刚建立序列后,无法提取当前值,只有先提取下一个值时才能再次提取当前值。
提取下一个值
select 序列名称.nextval from dual
提取当前值
select 序列名称.currval from dual
(三)删除序列
DROP SEQUENCE 序列名称;
--创建序列:自增长策略
create sequence seq_stuno --从1开始,每次递增1,一直到number的最大值
start with 2 --起始值
increment by 2 --步长
minvalue 2 --最小值
maxvalue 9999999 --最大值
--获取序列
--获取序列的下一个值
select seq_stuno.nextval from dual;
--获取序列的当前值
--序列不连续的
select seq_stuno.currval from dual;--6
--作为主键如何使用呢?
insert into t_temp values(seq_stuno.nextval,null);
select * from t_temp;
--删除序列
drop sequence seq_stuno;
三、索引(重要)
(一)什么是索引
索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o 次数,从而提高数据访问性能。
索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于下图的一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提到的伪列(ROWID)
为什么要使用索引?索引好处是什么?
原理
(二)普通索引
语法:
create index 索引名称 on 表名(列名);
需求:我们经常要根据业主名称搜索业主信息,所以我们基于业主表的name字段来建立索引。语句如下:
create index index_owners_name on T_OWNERS(name)
索引性能测试:
创建一个两个字段的表
create table T_INDEXTEST (
ID NUMBER,
NAME VARCHAR2(30)
);
编写PL/SQL 插入100万条记录( 大概800Mb,你的表空间要有自增,时间5分钟左右看电脑性能)这只是测试查询性能 选择性做 不做也行 知道结果就好
BEGIN
FOR i in 1..1000000
loop
INSERT INTO T_INDEXTEST VALUES(i,'AA'||i);
end loop;
commit;
END;
创建完数据后,根据name列创建索引
CREATE INDEX INDEX_TESTINDEX on T_INDEXTEST(name)
执行下面两句SQL执行
SELECT * from T_INDEXTEST where ID=765432;
SELECT * from T_INDEXTEST where NAME='AA765432';
我们会发现根据name查询所用的时间会比根据id查询所用的时间要短
--查
--建立索引前的时间:
select * from t_temp where name='A789456';--31
select * from t_temp where id='789456';--31
select * from t_temp where rowid='AAADhPAAIAAAAkYAAf';--0
--建立索引
create index index_temp_name on t_temp(name);
select * from t_temp where name='A789456';--0
select * from t_temp where id='789456';--31
select * from t_temp where rowid='AAADhPAAIAAAAkYAAf';--0
祝你幸福
送你一首歌:《In the eyes》江映东
附图:1月11日,在北京航天飞行控制中心大屏幕上拍摄的着陆器(右)和巡视器互拍画面。新华社图