`
yanghuidang
  • 浏览: 914224 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

关于Oracle 9i 跳跃式索引扫描(Index Skip Scan)的小测试

阅读更多


在Oracle9i中我们知道能够使用跳跃式索引扫描(Index Skip Scan).然而,能利用跳跃式索引扫描的情况其实是有些限制的.

从Oracle的文档中我们可以找到这样的话:

Index Skip Scans
Index skip scans improve index scans by nonprefix columns.
Often, scanning index blocks is faster than scanning table data blocks.
Skip scanning lets a composite index be split logically into smaller subindexes.
In skip scanning, the initial column of the composite index is not specified in the query.
In other words, it is skipped.

The number of logical subindexes is determined by the number of distinct values in the initial column.
Skip scanning is advantageous if there are few distinct values in the leading column of the composite
index and many distinct values in the nonleading key of the index.

也可以这样说,优化器根据索引中的前导列(索引到的第一列)的唯一值的数量决定是否使用Skip Scan.

我们首先做个测试:

SQL> CREATE TABLE test AS
2 SELECT ROWNUM a,ROWNUM-1 b ,ROWNUM-2 c,ROWNUM-3 d,ROWNUM-4 e
3 FROM all_objects
4 /

SQL> SELECT DISTINCT COUNT (a) FROM test;

COUNT(A)
----------
28251

表已创建。

SQL>
SQL> CREATE INDEX test_idx ON test(a,b,c)
2 /

索引已创建。

SQL> ANALYZE TABLE test COMPUTE STATISTICS
2 FOR TABLE
3 FOR ALL INDEXES
4 FOR ALL INDEXED COLUMNS
5 /

表已分析。

SQL> SET autotrace traceonly explain
SQL> SELECT * FROM test WHERE b = 99
2 /

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=36 Card=1 Bytes=26)
1 0TABLE ACCESS (FULL) OF 'TEST' (Cost=36 Card=1 Bytes=26)

--可见这里CBO选择了全表扫描.

--我们接着做另一个测试:

SQL> drop table test;

表已丢弃。

SQL> CREATE TABLE test
2 AS
3 SELECT DECODE(MOD(ROWNUM,2), 0, '1', '2' ) a,
4 ROWNUM-1 b,
5 ROWNUM-2 c,
6 ROWNUM-3 d,
7 ROWNUM-4 e
8 FROM all_objects
9 /

表已创建。

SQL> set autotrace off
SQL> select distinct a from test;

A
--
1
2

--A列只有两个唯一值

SQL> CREATE INDEX test_idx ON test(a,b,c)
2 /

索引已创建。


SQL> ANALYZE TABLE test COMPUTE STATISTICS
2 FOR TABLE
3 FOR ALL INDEXES
4 FOR ALL INDEXED COLUMNS
5 /

表已分析。

SQL> set autotrace traceonly explain
SQL> SELECT * FROM test WHERE b = 99
2 /

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=1 Bytes=24)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=4 Card=1 Bytes=24)
2 1 INDEX (SKIP SCAN) OF 'TEST_IDX' (NON-UNIQUE) (Cost=3 Card=1)

Oracle的优化器(这里指的是CBO)能对查询应用Index Skip Scans至少要有几个条件:

1 优化器认为是合适的.
2 索引中的前导列的唯一值的数量能满足一定的条件.
3 优化器要知道前导列的值分布(通过分析/统计表得到)
4 合适的SQL语句
......


更多信息请参考:

http://www.itpub.net/showthread.php?threadid=85948

http://www.cnoug.org/bin/ut/topic_show.cgi?id=608&h=1&bpg=1&age=100

http://www.itpub.net/showthread.php?s=&postid=985602#post985602

Oracle9i Database Performance Tuning Guide and Reference Release 2 (9.2)
Part Number A96533-02

感谢参加讨论的各位高手.

分享到:
评论

相关推荐

    Oracle 9i用索引跳跃扫描提高查询速度

    索引跳跃式扫描(index skip scan)是Oracle9i的一个新的执行特性,尤其适用于使用连接索引和访问多值索引的Oracle查询。Oracle9i的索引跳跃式扫描执行规则允许使用连接索引,即使SQL查询中不指定性别。 这一特性使得...

    关于Oracle 9i中监视索引的使用介绍

    要避免全表搜索,我们一般在每个可能被搜索的列中建立索引。不过索引会占用许多的表空间;在许多的情况下, 索引比被索引的表消耗更多的存储空间...本文的目的就是向你介绍通过Oracle9i中的新特性来辨别未使用的索引。

    oracle 9i 全部下载链接

    oracle 9i所有版本最新下载链接 ...Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk1.zip ...

    Oracle 9i Client (Oracle 9i 客户端) 简化版 (不安装Oracle客户端,也可以使用PLSQL Developer)

    1、本软件可作为简单的Oracle9i客户端使用,如用户对Oracle有更高的使用要求,请正式安装Oracle客户端或服务器。 2、本软件安装后,可使用自带的SQL Plus连接Oracle服务器,支持EXP、IMP命令。用户可以配合PLSQL ...

    oracle9i物理结构,oracle9i物理结构

    oracle9i物理结构,oracle9i物理结构,oracle9i物理结构,oracle9i物理结构,oracle9i物理结构,oracle9i物理结构

    Oracle 9i中如何监视索引的使用情况

    索引可以加速查询搜索,特别是在一个数据仓库的环境中...在Oracle9i之前,要知道一个索引是否被使用是困难的,因此许多数据库都有许多没用的索引。本文的目的就是向大家介绍通过Oracle9i中的新特性来辨别未使用的索引。

    oracle9i下载地址

    oracle9i下载地址, 分三个IOS文件, 加压即可安装.

    Oracle9i开发文档

    Oracle9i的开发学习资料,PDF中文版,非扫描版,13章全,附带8个章节使用的SQL语句和代码。 第一章 从零开始 Oracle9i基础 第二章 构建环境 安装Oracle9i 第三章 管理入门 数据库服务器的管理 第四章 数据利器 SQL ...

    oracle9i全备份导入到11g说明

    文档简单介绍了关于oracle9i全备份,导入oracle11g时,因blocksize 不一致的处理方式,帮助大家解决此类问题。

    oracle9i客户端精简版.zip

    oracle9i客户端精简版,用于测试数据库数据,检车表结构,操作简单数据,节约空间,秒安装,秒测试

    Oracle9i+Windows下安装

    百度云盘下载地址https://pan.baidu.com/s/1iU5zzuVbm2-uJtzQGr98zw windows下安装Oracle9i

    Oracle9i 数据库安装

    利用 DBCA 建立 Oracle9i 数据库 在使用 DBCA 之前,先检视一下目前环境。以我的系统为例:操作系统为 SuSE Linux 7.2,安装了 Oracle9i Enterprise Edition Release 9.0.1,Oracle9i 数据库的 ORACLE SID 设定为 ...

    Oracle9i客户端精简版

    Oracle9i客户端精简版。 Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版

    oracle9i310.rar

    oracle9i简版客户端,极适合初学者,虚拟机,老旧电脑和xp用户,耗资源极小,可连接10g,11g

    oracle9i客户端最小安装包

    oracle9i客户端最小安装包.不需要安装oracle

    oracle9i310精简版

    Oracle9i客户端精简版基于Oracle 9.0.1.0.1制作,去除了冗余的功能,仅保留ODBC和OLE DB功能,同时保留SQL*PLUS(包括命令行版和windows版)和SQL*Loader的完整功能。提供完美的卸载功能(即卸载后完全恢复到安装前...

    Oracle9i PL/SQL从入门到精通

    Oracle9i PL/SQL从入门到精通

    Oracle 9i10g 数据库管理详细

    Oracle 9i10g 数据库管理详细

    Oracle9i数据库备份和恢复方案

    Oracle9i数据库备份和恢复方案Oracle9i数据库备份和恢复方案Oracle9i数据库备份和恢复方案Oracle9i数据库备份和恢复方案

    Oracle 9i 10g 11g odbc driver数据库连接驱动

    Oracle 9i 10g 11g odbc driver数据库连接驱动

Global site tag (gtag.js) - Google Analytics