索引——跳跃式扫描

索引跳跃式扫描(index skip scan)是ORACLE9i用来提高性能的新特性,对于使用复合索引的数据库应用程序意义尤为重大。
  
  复合索引(又称为连接索引)是一个包含多个字段的索引。在ORACLE9i以前的ORACLE版本里,只有那些在WHERE子句里引用整个索引或者是引用索引的一个或多个前导字段的查询,才能使复合索引有效而提高检索效率。而在ORACLE9i里,一个复合索引即使在一次查询中没有使用前导字段,也可能通过“索引跳跃式扫描”被有效引用。在一次跳跃式扫描中,每个复合索引前导字段的独特值(DISTINCT VALUE)只会被搜索一次,ORACLE9i会在复合索引前导字段每个独特值区间结合WHERE子句中的其它复合索引字段搜索符合条件的目标记录,这种做法的结果导致了在索引中的跳跃式扫描。
  
  索引跳跃式扫描主要有两个优点:
  1、以前版本中的表扫描(TABLE SCAN)可能会转变为索引扫描,提高了某些查询的执行效率;
  2、应用程序使用较少的索引就能达到提高效能的目的,并且既节省存储空间,又能提高DML和维护操作的效率。
  
  假设有一个汽车注册信息的表,包含了250万条纪录,结构如下:
  
  REGISTERED_OWNERS
  (STATE VARCHAR2(2) NOT NULL,
  REGISTRATION# VARCHAR2(10) NOT NULL,
  FIRST_NAME VARCHAR2(30),
  LAST_NAME VARCHAR2(30),
  MAKE VARCHAR2(30),
  MODEL VARCHAR2(15),
  YEAR_MFG NUMBER,
  CITY VARCHAR2(30),
  ZIP NUMBER)
  
  进一步假设在字段(STATE,REGISTRATION#)上存在一个复合索引,那么下面语句的执行速度会有很大提高:
  SELECT first_name, last_name, zip FROM REGISTERED_OWNERS
  WHERE registration# = '4FBB428'
  使用索引查询速度大约可以提高90倍,在ORACLE8i(索引跳跃式扫描)中,这个查询需要21.42秒,而同样的硬件配置使用ORACLE9i只需要0.24秒。
  
  索引跳跃式扫描非常有效,对用户和应用程序而言是透明的,并且不需要使用额外的新索引就能提高数据库的性能,有些时候甚至可以允许移除某些索引而不会对性能有太大影响
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
索引跳跃扫描(Index Skip Scan)是一种利用多级索引来跳过某些索引值的访问方式。它适用于多列索引的查询,其中查询条件包含了多个列,并且这些列的顺序与索引的列顺序不完全匹配。 具体实现索引跳跃扫描的步骤如下: 1. 创建适合索引跳跃扫描的多列索引:为了支持索引跳跃扫描,需要创建一个多列索引,其中包含多个列的组合。索引列的顺序应该与查询条件的顺序相匹配。 2. 选择合适的索引:对于需要执行索引跳跃扫描的查询,选择一个合适的多列索引来支持该查询。通常情况下,这个索引应该能够满足查询的前缀条件。 3. 跳过索引值:在进行索引扫描时,通过跳过一些索引值,直接访问满足查询条件的行数据。具体的跳跃策略会根据查询条件和索引的结构而有所不同,但基本原理是通过使用多级索引来跳过不满足查询条件的部分数据,从而减少不必要的访问和过滤操作。 需要注意的是,索引跳跃扫描的效果取决于查询条件和索引的结构。如果索引列的选择度较高,即索引值的离散度较好,那么索引跳跃扫描可能会提供较好的性能改进。然而,如果索引列的选择度较低,即索引值的离散度较差,那么索引跳跃扫描可能不会带来明显的性能提升。因此,在使用索引跳跃扫描时,需要根据具体情况进行测试和评估,确保其能够有效地改善查询性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值