采用高速全扫描索引(index ffs) 为了避免全表扫描

参考原始:

Index Fast Full Scan Usage To Avoid Full Table Scans (Doc ID 70135.1)

可适用:

Oracle Database - Enterprise Edition - Version 7.3.0.0 to 11.2.0.3 [Release 7.3.0 to 11.2]

Information in this document applies to any platform.

***Checked for relevance on 2-Dec-2013***

目的:

本文讨论了使用 Index Fast Full Scans (Index FFS) 来避免Full Table Scans (FTS)

范围:

那些遇到 查询走fts而不走index ffs这样的情况 的支持分析人员和客户

细节:

什么时候index ffs 优先于fts 被使用?

从Oracle8 Server Concepts manual:

1.索引必须包含全部的在查询中出现的列(确切的说是要么 出如今select之后,要么 出如今where 之后)。

2.index ffs 仅仅适用于cbo

3.Index FFS  相应的hint为 /*+ INDEX_FFS() */

index ffs是在oracle 7.3中被引入的。

在oracle 7中,须要把初始化參数V733_PLANS_ENABLED设置为true

一个index ffs 将会扫描index中的全部blocks。

返回的数据是不排序的。

index ffs 能够使用多块I/O,也能够像 fts那样使用并行。

样例:

使用 the standard emp and dept tables 来举例

准备工作:创建一个复合索引

create index emp_ix on emp(empno, deptno, ename);

第一种情况:查询一个单表,该查询的 select语句之后有索引中的所有列:

SQL> select /*+ INDEX_FFS (emp emp_ix) */ empno, deptno, ename from emp;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=21 Bytes=693)

1 0 INDEX (FAST FULL SCAN) OF 'EMP_IX' (NON-UNIQUE) (Cost=4 Card=21 Bytes=693)

另外一种情况:查询一个单表, 组成index的列,要么 出如今select之后。要么 where 之后

SQL> select /*+ INDEX_FFS (emp emp_ix) */ empno, ename from emp where deptno > :bind1;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=2 Bytes=66)

1 0 INDEX (FAST FULL SCAN) OF 'EMP_IX' (NON-UNIQUE) (Cost=4 Card=2 Bytes=66)

第三种情况:查询中有构成index的全部列和没在index中的列

SQL> select /*+ INDEX_FFS (emp emp_ix) */ empno, ename from emp where deptno > :bind1 and sal <:bind2;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=46)

1 0 TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=1 Bytes=46)

Note: CBO 优化器选择了 FTS。原因是 INDEX FFS不能满足  all columns in query 这个要求。

--->能够看出,尽管用了hint,可是运行计划依旧不走index ffs,而是走了TABLE ACCESS (FULL)。原因非常easy:走了index ffs就得不到正确的结果。

第四种情况:构成复合索引的列,包含在查询中。

SQL> select /*+ INDEX_FFS (emp emp_ix) */ ename from emp;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=21 Bytes=147)

1 0 INDEX (FAST FULL SCAN) OF 'EMP_IX' (NON-UNIQUE) (Cost=4 Card=21 Bytes=147)

NOTE: INDEX FFS still chosen if subset of index columns in query

第五种情况:查询包含关联(join)

SQL> select /*+ INDEX_FFS ( e emp_ix) */ e.ename, d.dname from emp e , dept d where e.deptno=d.deptno;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=4 Bytes=168)

1 0 HASH JOIN (Cost=6 Card=4 Bytes=168)

2 1 INDEX (FAST FULL SCAN) OF 'EMP_IX' (NON-UNIQUE) (Cost=4Card=21 Bytes=420)

3 1 TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=21 Bytes=462)

--->查看,对emp桌(这是:e桌),也可以去index ffs

【从翻译mos文章】采用高速全扫描索引(index ffs) 为了避免全表扫描的更多相关文章

  1. 【翻译mos文章】Linux x86 and x86-64 系统SHMMAX最大

    Linux x86 and x86-64 系统SHMMAX最大值 参考原始: Maximum SHMMAX values for Linux x86 and x86-64 (文件 ID 567506. ...

  2. 【从翻译mos文章】在oracle db 11gR2版本号被启用 Oracle NUMA 支持

    在oracle db 11gR2版本号被启用 Oracle NUMA 支持 参考原始: Enable Oracle NUMA support with Oracle Server Version 11 ...

  3. 【从翻译mos文章】SGA_TARGET与SHMMAX关系

    SGA_TARGET与SHMMAX关系 参考原始: Relationship Between SGA_TARGET and SHMMAX (文件 ID 1527109.1) 申请: Oracle Da ...

  4. 【从翻译mos文章】正在实施的获取job的 session id

    正在实施的获取job的 session id 参考原始: How to get the session Id of the Running Job (Doc ID 1604966.1) 申请: Ora ...

  5. 【从翻译mos文章】在OGG (Oracle GoldenGate) 正在使用SCHEMATRANDATA如果,需要额外的db patch

    在OGG (Oracle GoldenGate) 正在使用SCHEMATRANDATA如果.需要额外的db patch 参考原始: Patches needed to support SCHEMATR ...

  6. 【从翻译mos文章】rac数据库,HC_&lt;SID&gt;.dat其他文件Oracle_Home用例下。

    rac数据库.HC_<SID>.dat其他文件Oracle_Home用例下. 参考原始: RAC database HC_<SID>.dat is used by instan ...

  7. 【从翻译mos文章】Weblogic AdminServer 启动fail,报错&quot;unable to get file lock, will retry&quot;

    Weblogic AdminServer 启动fail,报错"unable to get file lock, will retry" 参考原始: Weblogic AdminSe ...

  8. 【从翻译mos文章】不再用par file如果是,export or import 包含大写和小写表名称表

    不再用par file如果是,export or import 包含大写和小写表名称表 参考原始: How to Export or Import Case Sensitive Tables With ...

  9. 【从翻译mos文章】oracle linux 和外部存储系统 关系

    oracle  linux 和外部存储系统 关系 参考原始: Oracle Linux and External Storage Systems (Doc ID 753050.1) 范围: Linux ...

随机推荐

  1. 一起talk C栗子吧(第八回:C语言实例--素数)

    各位看官们,大家好,从今天開始.我们讲大型章回体科技小说 :C栗子,也就是C语言实例. 闲话休提, 言归正转. 让我们一起talk C栗子吧! 看官们.上一回中咱们说的是进制转换的样例,这一回咱们说的 ...

  2. C_C++指针指针应用详解

    前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其 ...

  3. Aamazon Web Service EC2 Ubuntu 新建用户而且用ssh连接host

    本文參照 http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/managing-users.html http://docs.aws.am ...

  4. openCV 和GDI画线效率对比

    一. 由于项目需要,原来用GDI做的画线的功能,新的项目中考虑到垮平台的问题,打算用openCV来实现,故此做个效率对比. 二. 2点做一条线,来测试效率. 用了同样的画板大小---256*256的大 ...

  5. openGL线型和线宽以及线的抗锯齿

    openGL线型和线宽以及线抗锯齿 一. 线宽 Opengl的线宽设置:glLineWidth(width); width为float类型值,在0~10.0,大于10以上按10来处理. 若开启线的反走 ...

  6. wikioi 1051哈希表

    题目描写叙述 Description 给出了N个单词,已经按长度排好了序.假设某单词i是某单词j的前缀,i->j算一次接龙(两个同样的单词不能算接龙). 你的任务是:对于输入的单词,找出最长的龙 ...

  7. Range锁(也即范围锁)

    浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题 本文出处:http://www.cnblogs.com/wy123/p/7501261.html (保留出处并非什么原创作品权 ...

  8. 【转】HTML5移动端最新兼容问题解决方案

    1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显 ...

  9. Swift 语言概览 -自己在Xcode6 动手写2-tableView

    import UIKit class ViewController: UIViewController ,UITableViewDelegate, UITableViewDataSource { va ...

  10. 【C++竞赛 C】yyy的数学公式

    时间限制:1s 内存限制:32MB 问题描述 yyy遇到了一个数学问题如下: S_n=∑F(i) 其中F(i)表示i的最大奇因数 yyy的数学非常好,很快就得到了结果.现在他把问题交给你,你能解决吗? ...