中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > 数据库综合
在9i里对基于函数的索引进行仅索引扫描
作者:佚名 时间:2004-07-10 10:40 出处:互连网 责编:chinaitpower
              摘要:在9i里对基于函数的索引进行仅索引扫描

  Oracle8i里的仅索引(index-only)执行计划在Oracle9i里得到了加强,所以现在能够提供对基于函数的索引(function-based index,FBI)的支持。Oracle的索引组织表(index-organized table,IOT)是一个很好的例子,能够说明Oracle如何在可能的时候忽略对表格的访问。简而言之,每当Oracle SQL优化器检测到它能够为查询提供服务,而不需要触及表格行的时候,Oracle就会调用一个完整的索引扫描,快速读取索引的每个块,而不需要触及表格本身。
  
  完整索引执行计划要比访问表格更快,其原因有两个:
  
  1.DB_FILE_MULTIBLOCK_READ_COUNT会被调用,以便更快地预先取回索引块。
  2.完整索引扫描能够使用Oracle的平行查询。
  在Oracle9i之前的版本里,只有在索引被创建而且不带有任何NULL值的时候,仅索引扫描才可能被使用。FBI是Oracle8的一个福音,它们事实上能够消除任何不必要的完整表格扫描。由于FBI能够精确地复制查询的WHERE子句里的任何数据列,所以它们一般都被用来确保索引正在服务查询。
  
  为了说明完全索引扫描如何同FBI一起工作,现在让我们来看下面这个关于学生的简单表格:
  
  create table
    student
  (
    student_name,
    date_of_birth
  );
  
  利用这个表格,我们在表格所有的数据列上创建了一个已连接的FBI:
  
  create index
    whole_student
  on
    student
  (
    initcap(student_name),
    to_char(date_of_birth,'MM-DD-YY')
  );
  
  Oracle9i知道,参照SQL陈述式里这些数据列的任何查询都能够使用完整索引扫描:
  
  select * from student
  where
    initcap(student_name) = 'Jones';
  
  select * from student
  where
    to_char(date_of_birth,'MM-DD=YY') = '04-07-85';
  
  那么,什么时候Oracle会选择完整索引扫描呢?实际上,完整索引扫描是非常少见的,其原因有两个:
  
  1.Oracle9i会要求WHERE子句里的所有判断述词(predicate)都匹配索引里的这些数据列。
  2.任何指定的数据列都有众多的内置函数可用,因此更有可能的情况是:会存在完全匹配查询的索引。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有