INDEX FAST FULL SCAN和INDEX FULL SCAN
INDEX FULL SCAN 索引全扫描。单块读 。它扫描的结果是有序的,因为索引是有序的。它通常发生在
下面几种情况(注意:即使SQL满足以下情况 不一定会走索引全扫描)
1. SQL语句有order by选项,并且order by 的列都包含
在索引中,并且order by 后列顺序必须和索引列顺序一致。
2. 在进行SORT MERGE JOIN的时候,如果要查询的列通过索
引就能获得,那就不必进行全表扫描了,另外也避免了排
序,因为INDEX FULL SCAN返回的结果已经排序。
3. 当查询中有GROUP BY,并且GROUP BY 的列包含在索引中。
等待事件:db file sequential read
HINT: INDEX(表名/别名 索引名)
INDEX FAST FULL SCAN 索引快速全扫描。多块读 。当SQL要查询的数据能够完全从索引中获得,那么
Oracle就不会走全表扫描了,就会走索引快速全
扫描。索引快速全扫描类似全表扫描,它可以多块
读,并且可以并行扫描。
等待事件:db file scattered read
HINT:INDEX_FFS(表名/别名 索引名) 测试INDEX FAST FULL SCAN:
create table test as select * from dba_objects; create index test_idx1 on test(object_name); BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'HR',
tabname => 'TEST',
estimate_percent => 30,
method_opt => 'for all columns size repeat',
no_invalidate => FALSE,
degree => 8,
cascade => TRUE);
END; SQL> explain plan for select object_name from test; Explained. SQL> select * from table(dbms_xplan.display()); PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------
Plan hash value: 1357081020 --------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1159K| 27M| 4687 (1)| 00:00:57 |
| 1 | TABLE ACCESS FULL| TEST | 1159K| 27M| 4687 (1)| 00:00:57 |
-------------------------------------------------------------------------- 8 rows selected. --从上面的执行计划中可知,此时走了全表扫描。
--由于我们需要查询的列为object_name,因此理论上只需要读取索引就应该可以返回所有数据,而此时为什么是全表扫描呢?
--这是因为NULL值与索引的特性所决定的。即null值不会被存储到B树索引。因此应该为表 test 的列 object_name 添加 not null 约束,或者
where条件里加上is not null 此例中虽然SQL> select count(*) from test where object_name is null; COUNT(*)
----------
0
object_name 不存在空值------------------- SQL> set autot trace exp
SQL> select object_name from test where object_name is not null; Execution Plan
----------------------------------------------------------
Plan hash value: 703934364 ----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1161K| 27M| 1563 (1)| 00:00:19 |
|* 1 | INDEX FAST FULL SCAN| TEST_IDX1 | 1161K| 27M| 1563 (1)| 00:00:19 |
---------------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter("OBJECT_NAME" IS NOT NULL) ---INDEX FULL SCAM
SQL> select object_name from test order by object_name; Execution Plan
----------------------------------------------------------
Plan hash value: 2007178810 -----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1161K| 27M| | 13060 (1)| 00:02:37 |
| 1 | SORT ORDER BY | | 1161K| 27M| 35M| 13060 (1)| 00:02:37 |
| 2 | TABLE ACCESS FULL| TEST | 1161K| 27M| | 4687 (1)| 00:00:57 |
----------------------------------------------------------------------------------- SQL> select object_name from test where object_name is not null order by object_name; Execution Plan
----------------------------------------------------------
Plan hash value: 436181854 ------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1161K| 27M| 5754 (1)| 00:01:10 |
|* 1 | INDEX FULL SCAN | TEST_IDX1 | 1161K| 27M| 5754 (1)| 00:01:10 |
------------------------------------------------------------------------------ Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter("OBJECT_NAME" IS NOT NULL)
INDEX FAST FULL SCAN和INDEX FULL SCAN的更多相关文章
- 索引快速扫描(index fast full scan)
一.索引快速扫描(index fast full scan) 索引快速全扫描(INDEX FAST FULL SCAN)和索引全扫描(INDEX FULL SCAN)极为类似,它也适用于所有类型的B ...
- Oracle 11G INDEX FULL SCAN 和 INDEX FAST FULL SCAN 对比分析
SQL> drop table test; 表已删除. SQL> create table test as select * from dba_objects where 1!=1; 表已 ...
- 为什么不走INDEX FAST FULL SCAN呢
INDEX FULL SCAN 索引全扫描.单块读 .它扫描的结果是有序的,因为索引是有序的.它通常发生在 下面几种情况(注意:即使SQL满足以下情况 不一定会走索引全扫描) 1. SQL语句有ord ...
- Index Full Scan vs Index Fast Full Scan-1103
[Oracle] Index Full Scan vs Index Fast Full Scan作者:汪海 (Wanghai) 日期:14-Aug-2005 出处:http://spaces.msn. ...
- index full scan/index fast full scan/index range scan
**************************1************************************* 索引状态: valid. N/A . ...
- index range scan,index fast full scan,index skip scan发生的条件
源链接:https://blog.csdn.net/robinson1988/article/details/4980611 index range scan(索引范围扫描): 1.对于unique ...
- index full scan和index fast full scan区别
触发条件:只需要从索引中就可以取出所需要的结果集,此时就会走索引全扫描 Full Index Scan 按照数据的逻辑顺序读取数据块,会发生单块读事件, Fast Full Index Scan ...
- index unique scan 与index range scan等的区别
存取Oracle当中扫描数据的方法(一) Oracle 是一个面向Internet计算环境的数据库.它是在数据库领域一直处于领先地位的甲骨文公司的产品.可以说Oracle关系数据库系统是目前世界上流行 ...
- Full scan vs index 执行计划的实验
根据Oracle-L邮件列表里主题「 Full scan vs index 」的讨论而来. 1.测试环境创建 SYS@HEMESRHTDB2(1.206)> select * from v$ve ...
随机推荐
- Linux bash常用测试判断选项
bash编程中if [ ]后面的测试选项: 1.整数测试: -le less equal -lt less than -ge greater equal -gt greater than -eq ...
- apache日志介绍
apache日志介绍: 通用日志格式: CommonLogFormat 组合日志格式: CombinedLogFormat 例如: <VirtualHost *: ...
- 为当前的div 动态添加一个样式
$("#target").addClass("newClass");
- Using load balance for thrift servers
Software load balance .Nginx(http://nginx.org) 1.Install nginx download source code from http://ngin ...
- The hacker's sanbox游戏
第一关:使用/usr/hashcat程序,对passwd中root的密码进行解密,得到gravity98 执行su,输入密码gravity98. 第二关:获取提供的工具,wget http://are ...
- (ASP页面查询等待提示效果)GridViewなどで検索中に「処理中メッセージ」を表示する方法(※他の長い時間処理も参照できる)
原博客 http://ino1970.blog119.fc2.com/blog-entry-163.html GridViewなどで検索中に「処理中メッセージ」を表示する方法 「GridViewなどで ...
- while loading persisted sessions 异常解决方法
一直用tomcat一段时间都正常无事,最近一次启动tomcat就发生以下异常: 严重: IOException while loading persisted sessions: java.io.EO ...
- SQL SERVER排序函数
排名函数是SQL Server2005新加的功能.在SQL Server2005中有如下四个排名函数: 1.row_number 2.rank 3.dense_rank 4.ntile 下面分别介绍一 ...
- EditPlus 快捷键
FileFtpUpload Ctrl+Shift+S 上传文件到 FTP 服务器 FileNew Ctrl+N 新建普通的文本文档 Fi ...
- C#输出40以内的所有奇数程序代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...