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

  • 相关阅读:
    Linux 或 Windows 上实现端口映射
    请收藏,Linux 运维必备的 40 个命令总结,收好了~
    收藏:存储知识全面总结
    超详干货!Linux 环境变量配置全攻略
    iv012-LockSupport
    iv011-死锁编码及定位分析
    iv010-线程池
    iv009-Callable接口
    iv008-线程之间通信之生产者消费者
    iv007-synchronized和Lock的区别
  • 原文地址:https://www.cnblogs.com/ybk2018af/p/9742221.html
Copyright © 2011-2022 走看看