Oracle 学习笔记(二)
一、索引
表的数据是无序的,所以叫堆表(heap table),意思为随机存储数据。因为数据是随机存储的,所以在查询的时候需要全表扫描。索引就是将无序的数据有序化,这样就可以在查询数据的时候 减少数据块的读取,实现快速定位数据。对大表的排序是非常消耗资源的,索引是事先排好序,这样就可以在需要排序的时候使用索引就可以避免排序。索引对数据库的影响是巨大的,但索引不是万能的,数据库对索引的使用是有选择的,我们可以强制使用索引,也可以强制不使用索引。一般的情况下数据库会自动的判断是否使用索引,除非你明确的在SQL语句中指定。所有索引的原形都是树状结构,由根、枝干和叶子组成。根和枝干中存放键值范围导 引指针叶子中存放的是条目,条目中存放的是索引的键值和该数据行的ROWID。索引的叶子间通过指针横向的联系在一起,前一个叶子指向下一片叶子,这样的目的是数据库在找到一个叶子后就可以查找相临近的叶子,而不必再次去查找根和枝干的数据块索引和表一样是段级单位,和表和回退段是平级单位
索引的建立
索引的建立有两种模式:隐式建立和显式建立隐式建立,当我们在表上建立主键和唯一性 约束的时候,数据库会自动的建立同名称的索引,如果你删除或者禁用约束, 数据库会自动的删除该同名称的索引,因为这两个约束是通过索引来实现的。显式建立,我们在需要的列上建立索引以提高数据库的性能,一个表上可以建立很多个索引。 因为列的排序组合会有很多种模式,每个列上可以有很多个函数索引,所以理论上一张表的索引数目是无限的,但请记住我们只建立查询时经常使用的索引 因为索引要占空间,而且需要数据库维护。 索引的维护数据库会自动的维护索引,我们手工可以重新建立和合并指定的索引当索引已经建立,我们 update 索引的键值的时候,数据库会删除老的条目,添加新的条目,因为索引是有序的,条目不能直接在原地修改到新的键值,新的键值必须去它应该存在的叶子
索引的重建与合并
索引的重建就是将老的抛弃,跟新的一样,这样就使索引的结构发生了变化,由原来的 2层结构降为一层结构。那合并和重建有什么区别呢?合并不释放段所拥有的空间,不处理正在变化的行,也就是说有事务的时候也可以合并。合并只是合并 枝干内的叶子,如果叶子属于不同的枝干则分别独立合并,记住合并不会改变索引的结构。
不会改变改变索引的表空间和索引类型。重建只能在没有事务的情况下进行,如果有未提交的事务,就会报错
二、 约束
运行每句话都判定约束为立即约束
在事务结束的时候统一判定叫延迟约束
延迟约束可以容纳一段时间的非法数据
建立约束默认为立即约束
三、 字典
在创建数据库时,数据字典是自动创建的,数据字典的位置: %oracle_home%\rdbms\admin\catalog.sql v$ 的字典是数据库在启动时初始化的
数据库字典的使用
数据库自己使用字典获取信息
数据库自动维护
查看字典获取数据库的相关信息:select table_name from dict where table_name like '%TABLE%' or like '%VIEW%';
四、 数据库三大视图
Dba_***
All_***
User_***
*** 代表某个单词,如table
Dba_table 当前整个数据库使用的表
All_table 当前用户可以访问的表
User_table 当前用户所拥有的表
五、 数据库控制文件
控制文件是二进制文件(不会超过 100m,一般是几m 大小)
控制文件记录了数据库的结构和行为
在mount 时候读
在数据库 open 时一直使用
丢失需要恢复
相关字典
查看控制文件 Select * from v$controlfile
六、 数据文件
数据文件是数据的存放载体
数据文件存在于操作系统上,可以是文件、设备。
数据文件不能独立存在,得有组织
数据文件的逻辑组织形式为表空间 tablespace
一个表空间内可以含有多个数据文件
数据库内可以有多个表空间
七、 表空间
System 表空间
数据库内最重要的表空间
在建立数据库时,就诞生了
在数据库 open 的时候必须 online
该表空间含有数据字典的基表
含有包,函数,视图,存储过程的定义
原则上不存放用户的数据
Sysaux 表空间(system auxiliary辅助)
10g新引入的新的表空间
分担 system表空间的压力
一些应用程序的存放数据空间
不能改名称
可以 offline,但部分数据库功能受影响
查看有那些应用程序使用了sysaux 表空间: select * from V$SYSAUX_OCCUPANTS;
查看用哪些程序可以更改某些帐号的默认表空间: SELECT OCCUPANT_NAME, SCHEMA_NAME, MOVE_PROCEDURE FROM V$SYSAUX_OCCUPANTS;
八、 临时表空间
不存放永久的对象
用来排序或临时存放数据的
临时表空间的内部分配由oracle自动完成
重新启动数据库时该表空间都会重新分配
有排序需求时分配,SHUTDOWN 后回收
数据库内可以有多个临时表空间
select TABLESPACE_NAME,CONTENTS,LOGGING from dba_tablespaces order by 2
九、 数据库的逻辑结构
Block(块)最基本的存储单元,块是建筑数据库的基石。是数据库的最小 i/o单位 Extent(范围)一次分配的连续的块
Segment(段)属于同一对象的范围组成一个段 Tablespace(表空间)数据文件的组织行为
Insert插入操作的详细步骤
1.获得空闲列表
2.找到可以使用的数据块
3.插入到pctfree 的位置停止插入
4.将该数据块从空闲列表中移走
5.通过指针找到下一个可以使用的数据块
6.继续插入,直到操作完成 步骤 3留下的空间是给块内的行update 使用的
Delete 删除操作的详细步骤
块内数据删除 当块内数据大于pctused的时候,该数据块不能插入,因为它不在空闲列表中
当块内数据少于pctused的时候,将该块加入到空闲列表,可以插入新数据了 我们接着上面的实验.进行删除操作 oracle 数据库的范围
范围:一次分配的,连续的,oracle 块。
查看表的块信息 select segment_name, owner,extent_id,file_id,block_id,blocks from dba_extents where owner='SYS' and segment_name='OBJ$'
Drop table; 不释放空间
Purge table 表名; 释放空间
Drop table t1 purge; 相当于 Truncate table 删除表同时清空回收站
建立表的原则
设计表的时候表的名称,列名称,索引,约束等名称要统一
表和列要加注释 将会出现 null 值的列放在最后,最后连续的 null 都不占空间 定义约束,
维护数据的完整性 尽量使用 cluster 类型的表,使存储最少,sql 语句最优
ROWID
ROWID 是伪列,索引使用它,表中并没有存储 rowid,每一行的 rowid 是该行的物理地址,可以快速定位该行.我们也可以将指定的数构造出一个 rowid
ROWNUM
在查询的结果中, ROWNUM 为结果中每一行标识一个行号,可以限制查询结果集中返回的行数。
数据压缩
压缩存储的原理是每个块内相同的数据只存放一次,所以我们在压缩表的时候最好要排序。 我们把大的静态表压缩存储,这样既可以节约存储空间又提高了 I/O 的效率, 还节约了内存的使用,但是经常 update 的表我们不要压缩存储会下降 DML的性能。 当表运行一段时间后,表中的数据会被删除,导致了高水位下有空的数据块, 或者不满的数据块,数据库在处理全表扫描的时候总是读高水位下所有的数据块。 降低了全表扫描的效率,我们将表挪动表空间后,数据会紧密的码放,释放多余的空间, 回收了高水位线。提高了全表扫描的性能,节约了存储空间。在9I前,挪动表以后会使索引无效, 在 10G 版本中会自动重新建立索引
十、配置数据库监听
配置文件 oracle_home\network\admin\listener.ora
监听的名称(默认为 listener,最好不改) 监听主机的信息(主机名称或ip,协议,端口号) 监听数据库的信息(数据库名称,oracle_home,实例名称) 只能监听本地的主机 不能监听远程的主机 一个监听可以监听多个数据库 一个数据库可以被多个监听监听
客户端网络配置
配置文件位置 oracle_home\network\admin\tnsnames.ora 网络服务名称(最好代表一定的含义如ip等) 远端主机的信息(主机名称或ip,协议,端口号) 远端数据库的信息(数据库名称,oracle_home,实例名称) 数据库的连接配置
数据库的客户端发出请求,有两种模式连接到服务器.一种为共享模式,一种为专有模式. 到底走哪种连接模式,由服务器的配置和客户端的配置两方面决定.数据库管理员要明确使用 专有连接连接到数据库,因为共享连接不能停止数据库. 我们配置的原则是批处理走专有,小的事物走共享.共享连接的概念很好, 可惜 BUG 太多,容易资源锁死,所以大部分用户放弃了 ORACLE 提供的共享连接, 而买昂贵的第三方中间件产品就是这个道理.oracle 只有数据库是很好的产品, 其它的都不出色.请选择产品的时候仔细考虑. 服务器的配置有两个因素决定了连接的模式. 初始化参数: dispatchers, shared_servers, local_listener 监听的配置:一定要监听 ip地址,因为有浮动 ip. 客户端的配置:tnsnames.ora 文件的设置
Oracle 学习笔记(二)的更多相关文章
- Oracle 学习笔记二
一.oracle通用函数vnl(a,b) 用于任何类型,如果a的值不为null返回a的值否则返回b的值 条件判断oracle中可以使用 case 字段 when 条件1 then 表达式1 when ...
- Oracle学习笔记二 初识Oracle(二)
Windows 中的 Oracle 服务 Oracle 9i的每个实例在Windows中都作为一项服务启动 服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理 “服务 ...
- oracle学习笔记(二)
1. Oracle字符串操作 1.1. 字符串类型 1.1.1. CHAR和VARCHAR2类型 CHAR和VARCHAR2类型都是用来表示字符串数据类型,用来在表中存放字符串信息, 比如姓名.职业. ...
- Oracle学习笔记二
多表查询: 笛卡尔积: 实际上是两张表的乘积,但是在实际开发中没有太大意义 格式: select * from 表1,表2 select * from emp; select * from dept; ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- oracle学习笔记第一天
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
随机推荐
- jQueryValidate的表单提交ajax刷新代码
$("#form-member-add").validate({ rules:{ username:{ required:true, minlength:2, maxlength: ...
- UVa 10382 - Watering Grass 贪心,水题,爆int 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- flashfxp 数据socket错误 连接已超时 filezilla
最近windows server 开启了防火墙后发现flashfxp连不上,报超时. 1,服务端的动态端口从指定的范围内取, 2,防火墙开启范围内端口. 参考:http://jingyan.baidu ...
- JAVA 程序的基本语法
首先看我们的第一个java程序: public class HelloWorld { public static void main(String[] args) { System.out.print ...
- Problem E: 平面上的点——Point类 (V)
Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定.现在我们封装一个“Point类”来实现平面上的点的操作. 根据“append.cc”,完成Point类的构造方 ...
- MFC VC++获取当前程序的运行路径
]; GetModuleFileName(, szDir, ); int i; i = lstrlen(szDir) - ; ) { if(szDir[i] == _T('\\')) { szDir[ ...
- nginx 504 Gateway Time-out
#设定http服务器 http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型 ...
- SVG的用法
三种添加方式 <iframe src="图的地址" frameborder="0"></iframe> <object width ...
- ipa 注入 dylib
前些日子再github找到了一个内存修改器 DLGMemor 免越狱在app内植入修改器,感觉很不错,就尝试去看看是否可行. 用到的工具: Xcode 10. optool 首先要做的,安装 opt ...
- 深入理解Java中的同步静态方法和synchronized(class)代码块的类锁
一.回顾学习内容 在前面几篇博客中我我们已经理解了synchronized对象锁.对象锁的重入.synchronized方法块.synchronized非本对象的代码块, 链接:https://www ...