使用索引快速全扫描(Index FFS)避免全表扫描(FTS)

(文档 ID 70135.1)

什么使用使用Index FFS比FTS好?

Oracle 8的Concept手册中介绍:

1. 索引必须包含所有查询中参考到的列。

2. Index FFS只能通过CBO(Index hint强制使用CBO)获得。

3. Index FFS使用hint:/*+ INDEX_FFS() */。

Index FFS是在7.3中引入的。在Oracle 7中,它要求初始化参数V733_PLANS_ENABLED的值需要是TRUE。

Index FFS将会扫描索引的全部块。返回的数据不会存储。Index FFS能够使用多块IO读,可以并行执行,就像全表扫描那样。

实例:

使用Oracle 8.0.5中标准的emp和dept表(可以使用UTLSAMPL.SQL创建),不建立任何表的统计数据或索引。使用autotrace产生执行计划。

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

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

查询单个表,查询出索引的全部列:

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

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

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

1 0 INDEX (FAST FULL SCAN) OF 'EMP_IX' (NON-UNIQUE) (Cost=4 Ca

rd=21 Bytes=693)

查询单个表,索引列放在select或where子句中:

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

where deptno > :bind1;

Execution Plan

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

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

1 0 INDEX (FAST FULL SCAN) OF 'EMP_IX' (NON-UNIQUE) (Cost=4 Ca

rd=2 Bytes=66)

查询索引的所有列,以及不再索引中的列:

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

where deptno > :bind1 and salExecution Plan

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

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

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

注意:CBO选择FTS,因为Index FFS不能满足查询所有列。

查询复合索引中的部分列:

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

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

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

1 0 INDEX (FAST FULL SCAN) OF 'EMP_IX' (NON-UNIQUE) (Cost=4 Ca

rd=21 Bytes=147)注意:如果查询中是索引列的子集,仍会选择Index FFS。

包含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 ptimizer=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=4

Card=21 Bytes=420)

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

oracle 索引快速全扫描,使用索引快速全扫描(Index FFS)避免全表扫描的若干场景相关推荐

  1. oracle查询不走索引全表扫描,使用索引快速全扫描(Index FFS)避免全表扫描的若干场景-Oracle...

    使用索引快速全扫描(Index FFS)避免全表扫描的若干场景 什么使用使用Index FFS比FTS好? Oracle 8的Concept手册中介绍: 1. 索引必须包含所有查询中参考到的列. 2. ...

  2. oracle 索引快速全扫描,使用目录快速全扫描(Index FFS)避免全表扫描的若干场景

    使用索引快速全扫描(Index FFS)避免全表扫描的若干场景 使用索引快速全扫描(Index FFS)避免全表扫描(FTS) (文档 ID 70135.1) 什么使用使用Index FFS比FTS好 ...

  3. 索引全扫描与索引快速扫描的区别

    1.索引全扫描(index full scan),跟随全表扫描样,索引也存在全扫描.全索引扫描只在CBO下有效,当优化器认为全索引扫描比全表扫描更有效时,才使用全索引扫描. 例如:select id ...

  4. MySQL limit 优化,百万至千万级快速分页:复合索引

    2019独角兽企业重金招聘Python工程师标准>>> MySQL 性能到底能有多高?用了php半年多,真正如此深入的去思考这个问题还是从前天开始.有过痛苦有过绝望,到现在充满信心! ...

  5. 表里有索引,为什么还都是全表扫描?

    http://www.itpub.net/thread-421134-1-1.html 这是有CBO根据执行计划的成本决定的 exec dbms_stats.gather_table_stats(ow ...

  6. 什么情况导致全表扫描,而不是用索引 收藏

    1.不要使用in操作符,这样数据库会进行全表扫描,  推荐方案:在业务密集的SQL当中尽量不采用IN操作符 2.not in 使用not in也不会走索引  推荐方案:用not exists或者(外联 ...

  7. 数据库中的全表扫描,索引扫描,以及相关知识点

    前沿:以下为参考文章(建议食用) 索引的访问方式:索引查找.索引扫描 Bookmark Lookup.RID Lookup.Key Lookup定义 聚集索引和非聚集索引(整理) SQL SERVER ...

  8. 索引:如何在海量数据中快速查找某个数据?

    ------ 本文是学习算法的笔记,<数据结构与算法之美>,极客时间的课程 ------ 前面讲过MySQL数据库索引实现原理,底层是依赖B+树这种数据结构来实现的.那类似Redisp 这 ...

  9. mysql 全表扫描、全索引扫描、索引覆盖(覆盖索引)

    full index scan:全索引扫描,查询时,遍历索引树来获取数据行.如果数据不是密集的会产生随机IO 在执行计划中是Type列,index full table scan:通过读物理表获取数据 ...

最新文章

  1. Linux中top命令的用法详解
  2. domdocument php 扩展_php使用自带dom扩展进行元素匹配的原理解析
  3. HTML5按钮的点击态问题
  4. linux安全pdf,linux系统安全加固.pdf
  5. OneAPM NI 基于旁路镜像数据的真实用户体验监控
  6. python django下载_简单了解django文件下载方式
  7. 华为P50外观定了:居中挖孔
  8. C#字典类型转URL参数字符串
  9. 工大瑞普虚拟思科实验室full(U7.3)环境配置方法
  10. 2016年国家公务员考试公告
  11. top20万_主播收入榜(9.28)| 陌陌主播叶哥收入50万夺冠
  12. iOS 强制屏幕实现旋转功能,超级简单。
  13. [高考作文] 秋细雨VS叶闲花
  14. Local Linear Model, Semi Local Linear Model and Local Level Model of TFP.STS
  15. Express + JWT用户认证最轻实践
  16. win10开机慢怎么解决_win10开机速度变慢的解决方法教程
  17. EasyExcel 三分钟搞定导入导出
  18. IAR OF STM8 Error[Pe095]: array is too large
  19. linux cpuid指令,通过CPUID指令获取CPU信息
  20. 关于selenium, 你还在因为chromedriver的版本与Chrome的版本不一致,需要手动更新chromedriver而烦恼吗?

热门文章

  1. 实时识别骰子的点数_Halcon
  2. 苹果可穿戴设备项目背后的那些专家
  3. SAP标准价及实际价查看
  4. vue中使用echarts自定义主题
  5. 智慧创造财富,第十五期【新营销·创富大会】圆满落幕!
  6. 分享88个HTML旅游交通模板,总有一款适合您
  7. 【genius_platform软件平台开发】第九十三讲:串口通信(485通信)
  8. 支付宝开发流程及注意事项
  9. git如何安装aur_Linux┊一个好用的AUR工具yaourt | 简单.生活
  10. 大数据风控必看,挖掘学历数据中暗藏的还款意愿及还款能力