zoukankan      html  css  js  c++  java
  • 关于索引访问的一些探讨

    索引范围扫描
    
    当谓语中包含将会返回一定范围数据的条件时就会选用索引范围扫描。
    索引可以是唯一或者不唯一的,  因为是由该条件来确定是否返回多个数据行的。
    INDEX RANGE SCAN  索引范围扫描。单块读  发生在对unique index/primary key 进行范围查找,    
                                                      对non-unique index进行等值查找,范围查找  
                         等待事件:db file sequential read 如果你监控某个SQL出现大量该等待事件,                             
                                                           有可能执行计划就有问题 
    
    
    所指定的条件可以使用诸如 <,> like ,between, 甚至是=等运算符
    SQL> select * from employees where department_id='60';
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 2056577954
    
    -------------------------------------------------------------------------------------------------
    | Id  | Operation		    | Name		| Rows	| Bytes | Cost (%CPU)| Time	|
    -------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT	    |			|     5 |   665 |     2   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| EMPLOYEES 	|     5 |   665 |     2   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN	    | EMP_DEPARTMENT_IX |     5 |	|     1   (0)| 00:00:01 |
    -------------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       2 - access("DEPARTMENT_ID"=60)
    
    Note
    -----
       - dynamic sampling used for this statement
    
    
    范围扫描将会从根数据块开始到第一个包含符合特定条件的条目所在的叶子块来遍历索引结构。
    
    再从那一点开始,从索引条目中取出一个行编号然后取出相应的表数据块(通过索引行编号访问数据表)
    
    在第一行被取出来之后,之前的叶子索引块将再一次被访问并读取下一个索引条目来获取下一个行编号。
    
    这种索引叶子块之间的反复来回将会不断持续直到所有匹配的索引都被读出。
    
    因此,所需访问数据块的次数将包含索引中的分支块数(可以通过索引的blevel统计信息得出)
    加上符合条件的索引条目数乘以2.
    
    必须乘以2是因为每取出表中返回5行数据并且blevel为3,则总的需要访问的数据块次数将是 (5行 * 2) + 3=13
    
    
    当返回5条记录时,需要访问13个块(索引块和表块),那是不是当访问记录达到一定程度时,索引访问的块数就接近了全表扫描的块数,
    
    而且index range scan是单块读,全表扫描是多块读,那此时全表扫描的效率就会高于索引扫描。
    
    
    
    
    

  • 相关阅读:
    docker容器打包、镜像文件导入与导出 , 支持批量
    服务器高并发配置优化
    php集成财付通支付接口
    C# 防界面假死
    以二进制方式读取图片保存到string
    转载 C#开发串口总结,并提炼串口辅助类到公用类库中
    C# comport 打印图像
    C#实现MD5加密
    execute sp_executesql 用变量获取返回值
    C# 获取计算机cpu 硬盘 网卡信息
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/3798098.html
Copyright © 2011-2022 走看看