1、基本原理

Oracle的日志:Oracle中为了提高硬盘写的效率,採用内存中数据缓冲区来保存数据,等到一定量或一定时间后才写到磁盘(DBWR)。

这个时候假如断电之类的故障发生,数据缓冲区的数据将丢失。

所以须要日志来保存记录,它也有个缓冲区,每隔3秒或Commit或满3分之1 都会触发LGWR进程写到REDO文件里(日志文件)。

回滚:Oracle中採用多版本号控制来进行并发。当写数据时,先把原数据写入UNDO中(回滚表空间)。然后再将原数据的位置改动为新数据。(其他进程读的时候,读回滚表中的数据,这就防止了脏读)。假设Commit了,那就回收回滚表空间。假设回滚了,那就将前镜像读出来覆盖原位置。

关于回滚的数据的全部操作,都要涉及日志,所以有UNDO就会有大量REDO!

DML的REDO:假如插入的日志为6(省略单位)(UNDO记录插入记录的rowid)。更新的日志就是7(UNDO记录更新记录的那列的旧字段)。而删除的日志就是32(UNDO记录原整行数据)。

2、批量插入

绑定变量:降低SQL的解析。

批量提交:降低与Oracle的交互。降低IO。

3、存储机制

SEGMENT -> 表示一张表。包括多个Extent。
EXTENT -> 表示扩展的最小单位。当数据增多时,依照一个EXTENT来进行扩充的。包括8个块。
Block -> 表示一个块,存储的最小单位(8KB)。头,表文件夹,行文件夹,可用空间(空余空间),数据区。

4、暂时表与分区与聚簇

暂时表长处:1.高效的删除记录,基于事务的全局暂时表COMMIT或SESSION连接退出后,暂时表记录自己主动删除(产生的记录也要少的多)。
    2.针对不同会话数据独立,不同SESSION訪问看到的结果不同。
分区:数据的全然独立分离(不同与索引的产生地址)。所以它会产生多个SEGMENT(就是多张表)。
    1.当依据分区字段查询时,能够高效的分区消除。仅仅訪问一部分。
    2.强大的分区操作,truncate删除,数据转移,分区分割,分区合并。
    3.全局索引,仅仅有分区列才干创建全局索引(或前缀)。非常多分区操作会使全局索引失效,必须重建。
    4.局部索引,其他字段就仅仅能构建局部索引。当进行查询时,须要訪问全部分区的局部索引,有时候,反而效率更低(每一个索引基本须要4次IO)。
聚簇表:仅仅能使用主键索引来约束数据的存放位置(通过organization index)。(默认主键是非聚簇)。长处是查询全部时不须要有回表的操作。缺点是更新开销更大。

5、索引

B+树的存储方式。50W条的时候高度为3。这时须要4次IO(包含回表)。
索引的长处:
    1.COUNT、SUM、AVG。可是注意当有空值时(B树不储存空值),或许开销更大。
    2.MAX、MIN。可是注意不能同一时候使用MAX+MIN。由于这个时候Oracle为了原子性。会全表扫描。
    3.ORDER BY(排序消耗大)、DISTINCT(会排序后消除)、UNION(注意单独的UNION是须要排序去重的)。
    4.组合索引:避免回表。可是注意查询范围时,必须依照组合的前缀顺序来查(等值无所谓)。有等值有范围时,等值在前,范围在后。
    5.位图索引:大量反复,极少更新时建立。

6、表连接

1.嵌套连接:用的最多,读出驱动表的全部适合行,然后一个一个拿到被驱动表中去依据连接条件查询(所以为了降低IO,驱动表最好为小的)。所以须要驱动表限制条件有索引,被驱动表连接条件有索引。
2.哈希连接:读出驱动表建立hash(驱动表小),读出被驱动表来查找hash。不支持大于小于的比較。
3.排序合并:读出两个表的元素,分别排序,然后归并。两个表的连接条件都要有索引。不支持不等于。


參考:收获,不止Oracle。

最新文章

  1. eclipse中添加python开发环境
  2. [deviceone开发]-动画示例源码
  3. sass学习笔记1
  4. ORGANIZATION
  5. 刨根问底U3D---关于Delegate的方方面面
  6. Java对象的序列化和反序列化实践
  7. sqlchemy - day3
  8. mysqlsla 分析mysql慢查询日志
  9. CodeWars题目筛选
  10. [XML] Resource帮助类
  11. Percona Live 2016 PPT整理-zhaiwx_yinfeng
  12. Non-unique Elements
  13. 基于W5500+Yeelink的远程灯光控制设计
  14. JAVA使用POI获取Excel的列数与行数
  15. Python-uiautomator使用说明文档
  16. Android LinearLayout 渐变背景
  17. TeamView提示商业用途禁止使用
  18. js备忘录6
  19. STM32示波器 信号发生器
  20. 常用排序算法的Python实现

热门文章

  1. 绘制更Smooth的UI
  2. RegexOptions.Compiled性能
  3. 文本框按键事件onkeydown、onkeypress、onkeyup区别
  4. Key lock 的秘密
  5. wcf wpf
  6. Js得到radiobuttonlist选中值,设置默认值
  7. JAVA与JSON的序列化、反序列化
  8. cocos2dx Menu
  9. VPS,虚拟主机,云主机,独立服务器区别
  10. 美化xterm