ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 跳跃式索引扫描(index skip scan) [final]

跳跃式索引扫描(index skip scan) [final]

原创 Linux操作系统 作者:tolywang 时间:2011-01-05 16:44:39 0 删除 编辑


对于组合索引来说,在oracle8i之前,如果where字句中没有组合索引的前导列
(即建立索引时排在第一位的字段)的话,这个组合索引在SQL语句中是不起任何作用的,
在oracle9i中引入了跳跃式扫描,也就是如果在where字句中没有前导列的话也可以使
用组合索引后面的列进行索引扫描,条件就是前导列的distinct的值不能太多,比如
100万记录中,前导列只有 "男","女" 两个值 。 

不过,Oracle承认索引跳跃式扫描没有直接索引查询速度快,但可以这样说,相比于
整个表扫描(full table scan),索引跳跃式扫描的速度要快得多。

 

例子:

create index sex_emp_id
on emp (sex, emp_id) ;

select  emp_name
from emp  
where emp_id = 123;


通过执行计划可以看出,Oracle使用跳跃式索引扫描其实就是将上面的语句划分
为以下语句执行,相当于使用了sex这个前导列,所以使用上了索引。

select emp_name from emp where sex = 'F' and emp_id = 123
UNION
select emp_name from emp where sex = 'M' and emp_id = 123;


对于高顺序键(high order key)中的独特值数目(也就是前导列distinct值太多),
Oracle的索引跳跃式扫描性能将会降低。如果主列(前导列)有50个不同值,根据
上面的SQL执行拆分分析,那么Oracle要发出50条查询union才能找回结果 。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/35489/viewspace-683309/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    14695370