Oracle
Oracle数据库
对索引的理解
- 索引相当于字典的目录,作用在于提升查询效率,降低磁盘读写,提升数据库性能。
- 索引是一种独立于表的数据库对象,可以存储在于不同的磁盘中间或者表空间。
- 索引一旦创建,由oracle数据库自己来维护,并且由oracle管理系统来指定何时使用索引,我们不需要在查询语句中自己指定索引。
- 索引的删除或者损毁不会对数据库表带来影响,只会影响查询效率
- 创建索引的时候,如果没有指定表空间,会存储到默认的表空间
- 在删除表的时候,基于表的索引会被删除
索引的工作原理
创建索引的时候,oracle会先在表空间中给索引开辟一个空间,并按索引字段对应的值进行分组,并把分好组的地址rowId存入索引空间中,当再次查询的时候,数据库会自动判断查询的条件中是否建有索引,如果有,则根据索引去查询符合条件的数据。
索引的创建
索引的创建有两种
- 自动创建--即在创建主见primarykey或者唯一性约束unique的时候,数据库会自动在相应的列上,创建唯一性索引。一般业务过程中通过逐渐查询比较频繁,提升查询效率。
- 手动创建--即在不唯一的裂伤创建非唯一的索引,加速查询效率。create index index_xxxx on mytable(创建索引的列) ta b lespace 表空间(表空间可以不指定) 工具创建。
索引的弊端
一般在数据比较大的表中并且经常查询的字段上才建立索引,数据量小或者不经常查询的字段建立索引的话,不仅占用内存空间,而且会降低查询效率,索引不是越多越好。
以下情形不要创建索引
- 表很小
- 表不经常作为连接条件的
- 表经常更新的。
系统日志历史表必须增加索引,效率超高。
执行计划
查询索引是否生效以及预估索引性能效果等
explain plan window 窗口
对查询语句按F5
数据字典
主要存储的是数据库系统信息,由数据库系统自己去维护管理,一般我们只进行查询,不作修改。
PLSQL
是oracle对sql语言的过程化扩张,是存储过程的基础。
组成:声明部分、可执行部分、异常处理部分、普通变量、引用变量(%type)、记录行变量(%rowtype)
使用引用类型,当列中的数据类型发生改变,不需要修改变列的类型。而使用普通方式,当列的类型改变时,需要修改变列的类型。使用%type是非常好的编程风格,因为它使得PL/SQL更加灵活,更加适应于对数据库定义的更新。
游标cursor
可以理解为数据库表返回的结果集,它带有向前移动的指针,并且每次只向前移动一行数据。
作用:可以临时存储返回的多行数据,通过变量游标,可以得到每一行的数据。
存储过程 program window--procedure
定义:是一组预编译的sql语句,也就是给plsql语句包装起来,完成一次创建任意调用的功能,相当于java中的方法。
作用:1.在开发中,有时候为了某种特定的业务功能,需要对数据库进行多次的连接关闭,这种连接关闭是很耗费资源的。并且会对数据进行多次的IO读写,性能比较低,如果把业务功能放在plsql中,只需要连接关闭一次数据库就可以实现我们的业务功能,大大提高了效率。2.更好的安全机制,对于没有权限执行存储过程的用户,也可以授权他们执行存储过程。
3.对应大量的sql语句和重复执行的sql语句,存储过程执行要快。
参数:不带参数的、待输入参数的,待输入输出参数的。
存储过程和存储函数的区别
1.存储过程可以有返回值也可以没有返回值,存储函数必须有返回值。
2.存储过程和存储函数都可以通过输出参数out实现多个返回值。
如何选择:原则上只有一个返回值的用存储函数,否则用存储过程,但是我们一般都使用存储过程
- 1.存储过程可以返回值也可以没有返回值,存储的灵活性。
- 2.存储过程既然有返回值了,可以替代存储函数
- 3.oracle新版本中已经不推荐适用存储函数了。
触发器
- 是一小段plsql程序
- 用来触发dml(insert、update、delete)操作的
- 在进行dml操作时会自动触发执行的一段程序
换句话说:触发器就是在执行某个操作(增删改)的时候出发一个动作(一段程序)。有点像struts2的拦截器,可以对cud增强。- 触发器类型
语句级触发器(表级触发器):在指定的操作语句执行之前或之后执行一次,不管它影响了多少行
行级触发器:出发语句作用的每一条语句都会被触发。