读书笔记-《基于Oracle的SQL优化》-第二章-1(三)

2014-11-24 17:05:58 · 作者: · 浏览: 2
e(dbms_xplan.display_cursor);
XPLAN包其实是对DBMS_XPLAN包的封装,使用XPLAN包就可以很清晰地看到执行计划中每一步的执行顺序。执行顺序在XPLAN包的显示结果中以列Order来显示,Order的值从1开始递增,表示执行顺序的先后。
SQL> select /*+ xplan_example1 */ a from t;
A
----------
1

SQL> select sql_text, sql_id, child_number from v$sql where sql_text like 'select /*+ xplan_example1 */%';
SQL_TEXT
--------------------------------------------------------------------------------
SQL_ID CHILD_NUMBER
------------- ------------
select /*+ xplan_example1 */ a from t
1smx7psgknjbd 0

2.5 Oracle里常见的执行计划 2.5.1 与表访问相关的执行计划 1、全表扫描:TABLE ACCESS FULL 2、ROWID扫描:TABLE ACCESS BY USER ROWID或TABLE ACCESS BY INDEX ROWID。取决于访问表时的ROWID来源。ROWID是来源于用户手工指定,或来源于索引。
2.5.2 与B树索引相关的执行计划 包括索引唯一扫描(INDEX UNIQUE SCAN)、索引范围扫描(INDEX RANGE SCAN)、索引全扫描(INDEX FULL SCAN)、索引快速全扫描(INDEX FAST FULL SCAN)和索引跳跃式扫描(INDEX SKIP SCAN)。
索引唯一扫描(INDEX UNIQUE SCAN):CREATE UNIQUE INDEX xxx ON xxx(xxx); 索引范围扫描(INDEX RANGE SCAN):CREATE INDEX ... select * from xxx where xxx=xxx; select *(plan_table_output) from table(dbms_xplan.display_cursor(null, null, 'ALL'));
begin for i in 1 .. 5000 loop insert into xxx value('a', i); end loop; commit; end; / exec dbms_stats.gather_table_stats(ownname=>'IPRA', tabname=>'XXX', estimate_percent=>100, cascade=>TRUE, no_invalidate=>false, method_opt=>'FOR ALL COLUMNS SIZE 1'); 即使使用select XXX(索引) from xxx;,用HINT,也会用全表扫描,不用索引。因为Oracle无论如何总会保证目标SQL结果的正确性,可能会得到错误结果的执行路径Oracle是不会考虑的。 对于单键值B树索引,NULL值不会存储在其中,一旦索引列出现NULL值,扫描索引会漏掉这些字段为NULL值的记录。-不准的执行计划。即使使用HINT。 此时只能将列修改为NOT NULL。则会用INDEX FAST FULL SCAN。HINT使用/*+ index(索引) */则用INDEX FULL SCAN。
2.5.3 与位图索引相关的执行计划 位图索引块的原因:主要是位图索引实现了快捷的按位运算的缘故。 位图索引的物理存储结构为:<被索引的键值,对应rowid的下限,对应rowid的上限,位图段>。这里的位图段是被压缩存储的,解压缩后就是一连串0和1的二进制位图序列,其中1表示被索引键值的一个有效rowid,Oracle通过一个转换函数(mapping function)将解压缩后的位图段中的1结合对应rowid的上下限,转换为被索引键值所对应的的有效rowid。 位图索引的物理存储结构就决定了Oracle 数据库中位图索引的锁的粒度是在索引行的位图段上。 对于 Oracle数据库中的位图索引而言,他是没有行锁这个概念的,要锁就锁索引行的整个位图段,而多个数据行可能对应同一个索引行的位图段。 位图索引的优势: 1、如果被索引的列的distinct值较少,那么位图索引和相同列上的B树索引比起来,会显著节省存储空间。 2、如果需要在多个列上创建索引,那么位图索引和同等条件下的B树索引比起来,往往会显著节省存储空间。 3、位图索引能够快速处理一些包含了各种AND或OR查询条件的SQL,这主要是因为位图索引能够实现快捷的按位运算。