频道栏目
读书频道 > 数据库 > Oracle > 高并发Oracle数据库系统的架构与设计
2.1.7 索引快速全扫描
2014-11-28 14:24:40     我来说两句
收藏   我要投稿
Foreword?推 荐 序 一文以载道 书以自娱侯松的新书付梓,嘱我为序,品读精华章节,览其前言,心有所感,遂言而记之。关于写作之因由,于作者来说,一直是最为重要的缘起。认真地写作一本好书,其中的坚持、勤  立即去当当网订购
 
索引快速全扫描(INDEX FAST FULL SCAN)是扫描索引中的所有数据块,与INDEX FULL SCAN很类似,最显著的区别就是它不对查询出的数据进行排序,即数据不是以排序顺序被返回。在这种存取方法中,可以使用多块读功能,也可以使用并行读,以便获得最大吞吐量并缩短执行时间。
 
看一看下面的例子,复合索引idx_alex_t01_id_ab的索引列为(a,b),查询的返回列a,b都包含在索引列上,这个时候的取数操作直接就能在索引上完成了,不需要再根据ROWID去表中取数了,而且没有排序的需求。这时执行计划走的就是INDEX FAST FULL SCAN的操作了。
SQL> select a, b from alex_t01 where b>600;
-------------------------------------------------------------------------------------------
| Id  | Operation            | Name               | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                    | 97038 |   758K|    83   (4)| 00:00:01 |
|*  1 |  INDEX FAST FULL SCAN| IDX_ALEX_T01_ID_AB | 97038 |   758K|    83   (4)| 00:00:01 |
-------------------------------------------------------------------------------------------
 
当我们取count(*)的时候,同样是不关心顺序的,也不需要排序操作,该查询只需要统计索引叶节点上的索引条目数量就可返回结果了,INDEX FAST FULL SCAN是一个非常好的选择。在下面的执行计划示例中,我们可以看到,SORT AGGREGATE操作是没有意义的,因为排序行数只有1行。
SQL> select count(*) from alex_t01;
-------------------------------------------------------------------------------------
| Id  | Operation             | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |             |     1 |     5 |    44   (3)| 00:00:01 |
|   1 |  SORT AGGREGATE       |             |     1 |     5 |            |          |
|   2 |   INDEX FAST FULL SCAN| PK_ALEX_T01 |   100K|   488K|    44   (3)| 00:00:01 |
-------------------------------------------------------------------------------------
 
我们也可以通过给SQL语句添加HINT关键字的方式,改变执行计划,强制SQL语句走索引快速全扫描,如下所示:
SQL> select /*+ index_ffs(alex_t01 idx_alex_t01_id_ab) */ a, b 
  2  from alex_t01 where b>600;
再来对比一下索引全扫描和索引快速全扫描,如表2-2所示:
索引快速全扫描是一种比较高效的扫描方式,在优化过程中,可以尽量多使用。
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.1.6 索引全扫描
下一篇:2.1.8 索引跳跃扫描
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站