8.2
当从表中访问数据时,有两种基本的方式:从表中读取每一行,或者通过Rowid一次读取一行数据。
Oracle 在执行全表扫描的时候,使用多块读取以快速扫描表,而使用索引的时候是单块读取的。
如果查询索引列的min或max值,oracle将从索引中检查该值。同样,如果对索引列执行COUNT函数,Oracle可以使用索引而不是该列
构造直方图可以帮助优化器在表中数据严重偏斜的情况下做出更好的规划。
索引的类型:B树,位图,HASH,索引组织表,反转键索引,基于函数的索引,分区索引,位图连接索引。
8.8
组合索引:在引入跳跃式扫描功能之前,查询只能在where子句中使用索引的第一列时使用索引
Oracle的直方图是高度均匀,而不是宽度均匀的
B树索引中的树叶块包含了索引值、ROWID、以及指向前一个和后一个树叶块的指针。
位图索引适合于决策支持系统和数据仓库,位图索引存储为压缩的索引值,其中包含一定范围的ROWID,因此Oracle必须针对一个给定值锁定所有范围内的ROWID。
位图连接索引是基于两个表的了连接的位图索引
8.9
Oracle 的SQL TRACE 使用程序可以对指定的查询、批处理进程和整个系统做时间统计。运行TKPROF并建立一个可以显示跟踪会话的文件。
TRACE输出的部分:SQL语句,统计部分,信息部分,行源操作部分,EXPLAIN PLAN部分。
DBMS_MONITOR:可以通过该程序跟踪从客户端到中间层、再到后端数据库的任何用户的会话。
端对端的应用程序跟踪可以基于如下:
会话
客户端标识符
实例
服务名
模块名
操作名
通过V$SQLAREA,也可以找到有问题的查询语句
PLAN_TABLE中的重要列:STATEMENT_ID,TIMESTAMP,REMARKS,OPERATION,OPTIONS,OBJECT_NODE,OBJECT_OWNER,OBJECT_NAME,
OBJECT_INSTANCE,OBJECT_TYPE,OPTIMIZER,ID,PARENT_ID,POSITION,OTHER,OTHER_TAG,COST,CARDINALITY,BYTES
STORED OUTLINES:可以允许在查询运行的任意时间内使用先前决定好的执行计划。
提示主要分为两类:应用指令和编译器指令,对优化器提供的影响对于连接操作和操作顺序的原则。
10g中有两种基于成本的优化器模式---NORMAL和TUNNING
V$SQLAREA 和V$SQL是很有用的视图,可以从中找到效率不好的sql语句;一般都使用EXISTS函数而不是IN函数。
目前共有5中连接方式:嵌套循环连接,排序合并连接,集群连接,散列连接和索引连接
嵌套连接是一种从连接结果中提取第一批记录的快速的方法。
排序合并连接,在缺乏数据的选择性或者两个表源都过大,可以使用。只能用于等价连接
任何牵涉到循环逻辑的PL/SQL程序单元都可能存在大幅度提高性能的空间。有两种方式:通过逻辑的重构来减少迭代的数量,并保持功能性结果不变;第二种是减少每次迭代的时间。
动态事务管理器是一个由3个部分组成的编程技术:游标和DML操作语句,执行间歇性的数据库COMMITS操作
Oracle RAC的体系结构:RAC是访问单个Oracle数据库的多个Oracle实例(节点)。该数据库是存储在共享存储系统上的物理数据库,每个实例都在单独的主机上。
STATSPACK和AWR的使用