Oracle - 索引

索引:************(概念性)

1.说明

  1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。

  2)索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率

  3)索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;

  4)索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响

  5)索引对用户是透明的,无论表上是否有索引,sql语句的用法不变

  6)oracle创建主键时会自动在该列上创建索引
CREAT UNIUQE|BITAM INDEX<>


CREATE [UNIQUE] | [BITMAP] INDEX index_name  --unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2    --bitmap,创建位图索引
[ASC|DESC],…] | [express])
[TABLESPACE tablespace_name]
[PCTFREE n1]                                 --指定索引在数据块中空闲空间
[STORAGE (INITIAL n2)]
[NOLOGGING]                                  --表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用
[NOLINE]
[NOSORT];                                    --表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用

索引的特点:
1.通过创建唯一索引,可以保证数据库表中每一行数据的唯一性(例如主键)
2.可以大大加快数据的检索速度,这也是倡建索引的主要原因(只限于唯一索引大大加速,其他索引也会加速但不明显)
3.可以加速表与表之间的链接,特别是实现数据的参考完整性方面特别有意义。(外键)
4.在使用分组和排序字句进行数据检索时,同样可以减少查询中分组和排序的时间。
5.提升查询效率(第一优化顺序)提高系统性能。

缺点:
1.创建索引和维护索引需要耗费时间。岁数据量的增加而增加;
2.索引需要占物理空间,除表所占的数据空间外,没一个索引还需要占
3.对表进行增删改时,索引需动态维护,降低了数据维护的速度。

那些列需要建索引:
1.经常需要搜索的列;加快搜索
2.主键的列;强制该列的唯一性和组织表中数据的排列结构
3.在经常用的链接的列上,这些列主要是一些外键,加快连接速度
4.在经常需要根据范围进行搜索的列创建索引

那些列不要创建索引:
1.很少用到的列;
2.很少数值的列;
3.大对象类型,长文本类型;
4.当修改性能远大于检索性能时;

索引限制(即使使用索引也不起作用):
1.使用不等号(<> ! not ),not时:(但 >=  <=可以 但要率不高)
2.is null 或 is not null;
3.使用函数;
4.比较不匹配的数据类型
5.ORACLE ROWIN
6.索引不要计算(不能)
7.OR 没有索引 建议使用 UNION
8.用EXISTS代替IN,用NOT EXISTS 代替 NOT IN


视图:给查询出来的虚拟表起一个别名   虚拟表:矩阵二维数组
视图创建使用

CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW view_name

AS

SELECT查询

[WITH READ ONLY CONSTRAINT]

OR REPLACE:如果视图已经存在,则替换旧视图。

FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。

NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。(正常情况下都是NOFORCE)
WITH READ ONLY:(只读视图)
默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

简单视图:一张表组成的视图,简单视图条件允许的情况下可以进行增删该操作
复杂视图:多张表组成的视图,不可以进行增删改操作

简单视图不可以进行增删改的情况:
1.视图被设置为只读视图(with read only)
2.基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作


视图的优点:
1.可以限制用户只通过视图检索数据,这样就可以对最终用户屏蔽建表时底层的基表;
2.可以将复杂的查询保存为视图,可以对最终用户屏蔽一定的复用性;
3.限制某个试图只能访问基表中的部分列或者部分行的特定数据。这样可以实现一定的安全性;
4.从多张基表中按一定

触发器:**********(概念+应用)
触发器的定义就是说某个条件成立的时候,触发器所定义的语句就会被自动执行。因此触发器不需要人为的去调用,也不能调用。

create [or replace] tigger 触发器名 触发时间 触发事件
on 表名
[for each row]
begin
 pl/sql语句
end

分类:
    按触发时间:before(前置触发器)    after(后置触发器)
    按触发动作:insert ,update ,delete
    按触发影响:行级,语句级,列级
        (行级和语句级只能存在一个,列级可以和两者之一共存)
        行级:行级触发器:对表中几行记录操作就触发几次(代码增加了for each row)
        语句级:执行几行语句触发几次
        列级:列级触发器,对指定列进行操作才会触发。并且只能用于update(update of 指定的列 on 表名)

引入三个关键字 inserting deleting updating


存储过程:**********************(应用型)

CREATE OR REPLACE PROCDURE 存储过程名字(参数列表)
IS
PL/SQL块
注意:PL/SQL块不能写declare

 存储过程参数不带取值范围,in表示传入,out表示输出(赋值为将形参赋给实参),类型可以使用任意Oracle中的合法类型。
 与Java的区别为可以有多个输出参数。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值