环境准备:

1.0

测试表

CREATE TABLE t (

id NUMBER,

d1 DATE,

n1 NUMBER,

n2 NUMBER,

n3 NUMBER,

n4 NUMBER,

n5 NUMBER,

n6 NUMBER,

c1 VARCHAR2(20),

c2 VARCHAR2(20),

pad VARCHAR2(4000),

CONSTRAINT t_pk PRIMARY KEY (id)

);

2.0

execute dbms_random.seed(0)

3.0

INSERT INTO t

SELECT rownum AS id,

trunc(to_date('2007-01-01','yyyy-mm-dd')+rownum/27.4) AS d1,

nullif(1+mod(rownum,19),10) AS n1,

nullif(1+mod(rownum,113),10) AS n2,

nullif(1+mod(rownum,61),10) AS n3,

nullif(1+mod(rownum,19),10) AS n4,

nullif(1+mod(rownum,113),10) AS n5,

nullif(1+mod(rownum,61),10) AS n6,

dbms_random.string('p',20) AS c1,

dbms_random.string('p',20) AS c2,

dbms_random.string('p',255) AS pad

FROM dual

CONNECT BY level <= 10000

ORDER BY dbms_random.value;

4.0

CREATE INDEX i_n1 ON t (n1);

CREATE INDEX i_n2 ON t (n2);

CREATE INDEX i_n3 ON t (n3);

CREATE INDEX i_n123 ON t (n1, n2, n3);

CREATE BITMAP INDEX i_bt_n4 ON t (n4);

CREATE BITMAP INDEX i_bt_n5 ON t (n5);

CREATE BITMAP INDEX i_bt_n6 ON t (n6);

CREATE INDEX i_c1 ON t (c1);

CREATE BITMAP INDEX i_bt_c2 ON t (c2);

5.0

BEGIN

dbms_stats.gather_table_stats(

ownname          => user,

tabname          => 'T',

estimate_percent => 100,

method_opt       => 'for all columns size skewonly',

cascade          => TRUE

);

END;

/

6.0 ALTER SESSION SET statistics_level = all;  --这是很关键的一步

7.0 分情况对待

7.1  字段id为主键,谓词条件中包含 id 且返回值是 1  故  对 id做 唯一索引扫描

7.2 字段n1 有普通索引,谓词条件中包含 n1= 且返回值是多个, 故作索引范围扫描

7.3 等于条件和B-树索引

7.4 等于条件和位图索引

按照执行的顺序:

第一个操作是 BITMAP INDEX SINGLE VALUE 应用限制条件扫描索引

第二个操作是 BITMAP CONVERSION TO ROWIDS,将第一个操作中获取的位图转换为一个rowid列表中

第三个操作 根据 第二个操作返回的rowid列表访问表。

注意以上操作只执行一次。

7.5 IS NULL条件和B-树索引

对于B-树索引来说,当使用多个sql条件并且其中至少一个事 不基于 IS NULL 或是 不基于 不等于条件时,才可以通过符合B-树索引来使用 IS NULL 条件。如下的查询对此进行了描述。

执行计划通过操作2上的谓词确认列n2 上的条件使用了索引I-N123.也要注意到 操作2 只返回了5行,杜宇前面一节的例子,没有n2 is null ,返回了 527行。

7.6 is null条件和位图索引

位图索引可以存储 null值哦

7.7 范围条件和B-树索引

索引扫描默认是升序的。意味着 当 order by 和 范围条件都是用同一列的时候,结果已经排好序了。因而,不用进行显示的排序。不过 当需要降序进行 order by 的时候,需要显示的制指定 index_desc

7.8 范围条件和位图索引

用位图索引,范围条件和等于条件以相同方式处理。唯一的差别是使用了 BITMAP INDEX RANGE SCAN 操作而不是BITMAP INDEX SINGLE VALUE操作。

7.9  IN 条件

in条件没有特定的访问路径。相反,在执行计划中,inlist iterator操作指出因为in条件的原因部分执行计划被多次执行。如下三个查询演示了操作如何根据索引类型被用于索引扫描。

第一个是唯一索引

第二个是非唯一索引

第三个是位图索引

  1. Min/max函数和B-树索引   Index full scan(min/max)j仅仅得到最右边和最左边的索引键

Oracle性能诊断艺术-学习笔记(索引访问方式)的更多相关文章

  1. Oracle性能诊断艺术-读书笔记

    create table test0605 as select * from dba_objects; select t1.owner,t1.object_name,t1.object_id from ...

  2. Oracle性能诊断艺术-读书笔记(范围分区)

    1. PARTITION RANGE SINGLE 注意:操作2 中的 TABLE ACCESS FULL 并不是全表扫描,只是对分区1 做 全分区扫描 case2 2. 分区范围迭代(PARTITI ...

  3. Oracle性能诊断艺术-读书笔记(执行计划中显示 Starts, E-Rows, REM A-Rows and A-Time)等)

    必须以 ' runstats_last '的方式查看执行计划哦! 操作一 hint  /*+ gather_plan_statistics */  : /* 添加 hint   /*+ gather_ ...

  4. Oracle性能诊断艺术-读书笔记(脚本dbms_xplan_output截图-非常好的)

  5. Oracle性能诊断艺术-读书笔记(脚本execution_plans截图)

  6. Oracle性能诊断艺术-相关脚本说明

    第二章 bind_variables.sql     展示怎样绑定变量及何时绑定变量会导致游标共享 bind_variables_peeking.sql  展示绑定变量窥测的优缺点 selectivi ...

  7. oracle性能诊断艺术-执行计划

    --case1 --case2 --case3 --case4 --case5 --case6 --case7 --case8 --case9 --case10 --case12 SQL> AL ...

  8. Bootstrap~学习笔记索引

    回到占占推荐博客索引 bootstrap已经用了有段时间了,感觉在使用上还是比较容易接受的,在开发人员用起来上,也还好,不用考虑它的兼容性,手机,平台,PC都可以有效的兼容. bootstrap官方a ...

  9. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

随机推荐

  1. Linux中Postfix邮件接收配置(四)

    Dovecot介绍 MRA邮件取回代理也有很多如courier-imap,cyrus-imap和dovecot这三个个工具,下面重点介绍Dovecot: 1.高安全性.据 Dovecot 的作者声称, ...

  2. MIPI接口LCD屏调试心得(转)

    源: MIPI接口LCD屏调试心得

  3. 20145331魏澍琛《网络对抗》Exp8 Web基础

    20145331魏澍琛<网络对抗>Exp8 Web基础 实践内容: 1.简单的web前端页面(HTML.CSS等) 2.简单的web后台数据处理(PHP) 3.Mysql数据库 4.一个简 ...

  4. 20135234mqy-——信息安全系统设计基础第二周学习总结

    Linux基础 1.Linux命令 command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数 选项(options)或参数(argument ...

  5. 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 3 章 答案

    判断对错 1.由计算机存储和操作的信息称为数据.2.由于浮点数是非常准确的,所以通常应该使用它们,而不是int.3.像加法和减法这样的操作在mAth库中定义.4.n 项的可能排列的数目等于 n!.5. ...

  6. Python3基础 list 推导式 生成100以内的偶数列表

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. chrome浏览器新建标签打开页面【学习笔记】

    按照下面方法进行设置即可

  8. 地宫取宝|2014年蓝桥杯B组题解析第九题-fishers

    地宫取宝 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  9. JavaScript权威指南1.概述

    JavaScript: 1.面向对象.解释型(非编译型)的程序设计语言.一种脚本语言 2.松散类型语言.变量不必具有一个明确的类型.对象中的属性名可以映射为任意的属性值 3.原始数据类型:数字.字符串 ...

  10. 如何给域名配置https证书

    http和https的区别就是,后者在网络传输过程中会很安全,原因就是给http安装了SSL证书. SSL证书有免费的和收费的,收费的顾名思义就是保护的方面更多,更安全.收费的像单域名的一年有几百.几 ...