Oracle一些概念重温
当前项目数据库用的Oracle。鉴于已经有几年没有接触过Oracle了,故在此重新温习一下oracle的部分概念和特性。
1.Oracle体系结构图
2.Oracle物理结构由三类文件组成,数据文件,控制文件和重做日志文件;参数文件、密码文件和归档日志文件不属于Oracle的数据库文件,但也是运行Oracle必不可少的。
3.Oracle提供了三种数据库连接方式:
基于主机的方式
基于客户机-服务器的方式
客户-应用服务器-数据库服务器方式。应用服务器包括 IIS或Apache服务器
通过这三种方式可以建立一个数据库连接(connection),一个连接可以并发建立多个会话(session)
4.Oracle的内存结构由两大部分:SGA(System Global Area)和PGA(Progress Global Area)构成。从体系结构图中可以形象看出。SGA包含几个重要的内存区:数据库高速缓存(Database buffer cache)、重做日志缓存(Redo log buffer cache)、共享池(Shared pool)、大池(Large pool)和Java池(Java pool)
5.Oracle的进程分为服务器进程和用户进程。服务器进程中有5个必须的,DBWR(数据库写进程)、LGWR(重做日志写进程)、PMON(进程监控进程)、SMON(系统监控进程)、CKPT(检验点进程)
6.一些支持的简单的sql函数
-- || 做字符拼接 select 'a' || 'b' as test from dual -- concat做字符拼接 select CONCAT('a', 'b') from dual; -- lower转小写 select lower('A') from dual; -- upper转大写 select upper('b') from dual; --initcap把段首和空格后的第一个字符转大写 select INITCAP('anyWord test') from dual; --substr截取字符 select SUBSTR('any word test', 0, 3) from dual; --length统计字符长度 select LENGTH('中1a-') from dual; --instr查找字符出现的位置 select INSTR('abc', 'f') from dual; --trim清空段首和段尾多余的空格 select TRIM(' a b c ') from dual; --replace替换字符 select REPLACE('abcd','bc',' any word ') from dual; --round按特定精度四舍五入 select round(0.333333,3) from dual; --trunc按特定精度截取 select trunc(0.3355,3) from dual; --sysdate查询当前时间 select SYSDATE from dual; --nvl判空并返回指定结果 select nvl(BOX_WIDTH,rownum) from WWV_FLOWS where BOX_WIDTH is null; --nvl2判空,按是否返回不同结果 select nvl2(box_width,box_width,rownum) from WWV_FLOWS; -- case when.. end 做条件查询 select (case when flow.id <= 4400 then 'less than 4400' when flow.id = 4500 then ' is 4500 ' else 'bigger than 4500 'end ),flow.ALIAS from WWV_FLOWS flow; -- decode(str,condtion1,result1...,default)做条件查询 select DECODE(flow.id, 4400,'is 4400',4500,' is 4500', 'other') from WWV_FLOWS flow; --rownum查询 select fow.rowid,rownum,fow.ALIAS from WWV_FLOWS fow; --having和group by的语法组合 select SUBSTR(flow.name, 0, 4) from WWV_FLOWS flow having SUBSTR(flow.name, 0, 4) like '%PE%' group by SUBSTR(flow.name, 0, 4) ;
7.数据字典,包含有
所有模式(用户)对象的定义
数据库的逻辑结构和物理结构信息
所有模式对象呗分配多少存储空间以及当前使用的空间
默认列的值
对象完整性的约束信息
用户信息
用户或角色的特权信息
审计信息
8.数据字典试图分3类,DBA_*,ALL_*,USER_*
9.管理和维护表
临时表的概念(写存储过程中可能会涉及)
表空间、段空间、区、块的概念
高水准线、行迁移的概念
一类特殊表:索引组织表
10.索引
索引的特点:
对于具有只读特性或较少插入、更新或删除操作的大表通常可以提高查询速度
可以对表的一列或多列建立索引
建立索引的数量没有限制
索引需要磁盘存储,需要Oracle自己维护
索引对用户透明,是否使用索引是Oracle决定的
11.Oracle的RDBMS在访问数据时最根本的3种访问方式:全表扫描,通过ROWID,使用索引
12.索引扫描类型包括
INDEX UNIQUE SCAN(索引唯一扫描)
INDEX RANGE SCAN(索引范围扫描)
INDEX FULL SCAN(索引全扫描)
INDEX FAST FULL SCAN(索引快速扫描)
13.限制使用索引的一些情况
where条件中使用不等于运算符(包括 <>、!=)
使用is null 或 is not null (貌似不会影响到位图索引)
使用函数(可以建立函数索引来规避这种情况)
使用不匹配的数据类型
14.优化器基于 选择性、集群因子两个关键因素来决定是否要所用索引
15.索引查找分为两个过程:
根据树进行定位、找出rowid(索引查找)
根据rowid找出表中的数据行(表数据查找)
16.直方图的概念
17.Oralce默认采用B树索引
18.hash索引、反向键索引、基于函数的索引
19.监控索引的使用
20.重建、维护和删除索引
21.纯粹做开发还可能牵扯到 事务、sql调优的概念。数据库层级除非写存储过程,一般牵扯到这一层的事务较少(大部分都是在上层做事务管控)。oracle的sql优化的话,简单的方式就是基于解释器来做,这一点上,用oracle比用mysql好太多了。
18位图索引为一种可选索引,但是对于有大量更新操作的表最好不选择使用位图索引