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位图索引为一种可选索引,但是对于有大量更新操作的表最好不选择使用位图索引

原文地址:https://www.cnblogs.com/ybk2018af/p/9742221.html