zoukankan      html  css  js  c++  java
  • oralce索引中INDEX SKIP SCAN 和 INDEX RANGE SCAN区别

    INDEX SKIP SCAN

    当表中建立有复合索引的时候,查询时,除复合索引第一列外,别的列作为条件时,且优化器模式为CBO,这个时候查询可能会用到INDEX SKIP SCAN

    skip scan会检测出前导列的唯一值个数,每个唯一值都会作为常规扫描的入口,再次基础上做一次查找,最后将这些查询的结果合并返回;

    举个例子:加入有这么一张表student(字段id,sex,name等)创建了一个复合索引(sex,name);

    select id,sex,name where name = '张四'

    上面这个查询条件name在复合索引中,且不是第一列,那么会将第一列sex,作为入口,sex列在数据库中无非两个值:男或女,那么它将转换为

    select id,sex,name where sex = '' and name = '张四'
    union
    select id,sex,name where sex = '' and name = '张四'

    也就是说sex有几个值,他就会有几个查询,并将这几个查询结果合并

    如果入口的数据集较大时,那么这个查询效率是很低的。但是相比全表扫描来说也是很快的,相比直接索引来说效率是低下的

    INDEX RANGE SCAN

    range scan是一种常用的检索方式,在index range scan中oracle访问毗邻的索引条目,然后根据rowid去检索表里的条目,

    例如查询:查询范围为80号的部门里的所有员工

    select JOB_ID,FIRST_NAME from employees where DEPARTMENT_ID=80;

    INDEX RANGE SCAN是范围扫描,举个例子,有1到100,分5个范围,要查询45就要到第3的范围里查,这样会很快

  • 相关阅读:
    在IE地址栏输入JS的有趣效果
    min-height for IE6
    针对主流浏览器的CSS-HACK写法及IE常用条件注释
    spring mvc从前台往后台传递参数的三种方式
    SQL语句优化
    SpringCloud分布式开发理解
    Spring的三大核心思想
    单例模式中的懒汉模式及饿汉模式
    SpringMVC工作原理
    堆和栈的区别及堆区和栈区的区别
  • 原文地址:https://www.cnblogs.com/wanggang-java/p/11970948.html
Copyright © 2011-2022 走看看