ORACLE_OCP之ORACLE的物理和逻辑存储结构
一、表-TABLE
- ORACLE的表默认的类型是堆表。
1.什么是堆表呢?
就是把数据堆进去的表我们称之为堆表,更像是一种容器。
2.当我们的表建立以后,会形成一个二维结构进行相关数据存放。
3.从逻辑存储角度来说,当我们建完一个表以后,就形成了一个和表名相同的段(SEGMENT),从10g以后
会使用一个延迟段去进行表的对象承载,10g和10g之前会立刻形成一个即时段去进行表的对象承载。
PS.表—>段,索引—>段,物化视图—>段,物化视图日志—>段,大对象—>段。
2.SELECT * FROM A:相当于去检索A表
PS.一个数据块只属于一个区,一个区只属于一个段,一个段只属于一个表空间。
PS.一个表空间包含了多个段,一个段包含了多个区,一个区包含了多个数据块。
PS.一个段由多个数据文件构成,一个数据文件只能属于一个段。
PS.一个表至少有两个区。所以一个段(表)至少有两个区和16个数据块构成。
PS.一个数据文件只属于一个表空间。
PS.一个数据文件存放一个表有限制,只允许你的表空间下有一个段(表)并且这个表的大小不超过32G。
3.想表中插入数据,实际上就是向段中的块插入数据。
-
PS.UNDO块的主要作用
- 为一致性读提供数据
- 发生ROLLBACK的时候UNDO块覆盖数据块。
-
索引
- 通过索引查找数据行:索引—>索引扫描(找到ROWID)—>找到数据块里对应的行。
-
DELETE语句是逻辑操作,不会真的删除物理数据
- 数据块里为什么不把DELETE数据删除掉呢?
- 防止内存碎片化。
- 防止ROLLBACK时UNDO出现问题,这样留足ROLLBACK凭证。
- 数据块里为什么不把DELETE数据删除掉呢?
-
TRUNCATE,不是真正的把数据块删除掉,只是将数据块变成了REUSE状态等待被覆盖写。
- TRUNCATE = DROP TABLE + CREATE TABLE。
-
PS.MYSQL的表默认的类型是所以聚簇组织表
- 由于MYSQL的表示索引聚簇组织表,所以索引在MYSQL中式非常重要的一个数据对象,如果一个表中没有主键没有索引将会造成锁升级的现象(表会自己根据需要去建立索引,然后锁表)。