Oracle一些概念重温
Posted ybkback2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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位图索引为一种可选索引,但是对于有大量更新操作的表最好不选择使用位图索引
以上是关于Oracle一些概念重温的主要内容,如果未能解决你的问题,请参考以下文章