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。

Oracle优化技术的更多相关文章

  1. ORACLE优化器RBO与CBO介绍总结

    RBO和CBO的基本概念 Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基 ...

  2. Oracle优化总结

    本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案.关键词 ORACLE数据库 环境调整 ...

  3. Oracle优化的几个简单步骤

    数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等.还有的人认为要抓出执行最慢的语句来进行优化.但实际情况 ...

  4. oracle优化原则(二)

    SQL优化原则 二.SQL语句编写注意问题 www.2cto.com 下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍.在这些where子句中,即使某些列存在索引,但是由于编写了劣质 ...

  5. Oracle优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

  6. ORACLE 优化

    本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了 ORACLE数据库的优化调整方案. 关键词 ORACLE数据库 环境 ...

  7. Oracle优化技巧

    现观察线上系统运行发现,线上某些业务查询存在等待时间长问题,后核查发现,部分问题出现在对数据库操作上Cost大部分时间,后根据网上各位前辈提供的优化技巧解决大部分问题,现写下本篇文章,一来巩固加深自己 ...

  8. Oracle索引技术研究

    Oracle索引类型 B树索引 特定类型索引 确定索引列 主键和唯一键值列的索引 外键索引 其他合适的索引列 B树索引 B树索引算法 B树是指B-tree(Balanced Tree),B树的存在是为 ...

  9. Oracle 优化器

    http://blog.csdn.net/it_man/article/details/8185370一.优化器基本知识   Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执 ...

随机推荐

  1. 内存测试工具memtester

    Memtester是用户态工具,用于测试内存子系统的故障.非常方便,支持32位 或64位Unix-like系统.对于硬件开发开发者来说,memtester可以定位到物理地址. 1. 安装 下载地址ht ...

  2. FineUI表单验证

    自动编码文本 默认情况下,Label的EncodeText属性为true,会对文本中的HTML进行编码.当然我们也可以设置EncodeText=false,从而将HTML片段赋值给Text属性,请看这 ...

  3. IIS报500.0错误

    IIS安全里面配置:Everyone.IUSR.IIS_IUSRS 参考地址:http://blog.chinaunix.net/uid-21375345-id-3213631.html

  4. OpenGL ES 2.0 混合

    混合技术 混合技术就是将俩个片元调和,主要用于将通过各项测试准备进入帧缓冲的片元(源片元)与原有片元按照设定的比例加权计算出最终片元的颜色值. OpenGL ES 2.0中是通过设置混合因子来指定两个 ...

  5. HDU 5195 - DZY Loves Topological Sorting

    题意: 删去K条边,使拓扑排序后序列字典序最大 分析: 因为我们要求最后的拓扑序列字典序最大,所以一定要贪心地将标号越大的点越早入队.我们定义点i的入度为di. 假设当前还能删去k条边,那么我们一定会 ...

  6. ZJOI 最小割 CQOI 不同的最小割 (最小割分治)

    题目1 ZJOI 最小割 题目大意: 求一个无向带权图两点间的最小割,询问小于等于c的点对有多少. 算法讨论: 最小割 分治 代码: #include <cstdlib> #include ...

  7. C#串口扫描

    1.传入serialport 和待显示串口的Commbox private void Search_AddSerialToComboBox(SerialPort MyPort, ComboBox My ...

  8. 用document.onreadystatechange和document.readyState确保文档加载完毕才获取DOM

    document.onreadystatechange = function(){ //document.readyState有“interactive”和“complate”两个值 if(docum ...

  9. js 16进制字符串互转

    /** * 16进制转换为字符串 * @param hex * @returns {*} */ function hexToString(hex) { var tmp = ''; if (hex.le ...

  10. Android广播机制(转)

    1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...