网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Windows下Oracle9i数据库文件的自.
.局域网通过LINUX主机上网手记.
.Oracle的一个内部工具block corr.
.Eclipse是如何连接Oracle数据库的.
.Oracle8的不安全因素及几点说明.
.双机容错方案.
.Delphi 3.0中连接数据库的三种方.
.面向对象的关系数据库设计.
.Oracle DBA需要的技能.
.linux下文件分割与合并.
.Oracle9i精华集粹(下).
.有关Oracle中虚拟专用数据库的探.
.ExactPapers Oracle 1Z0-030 200.
.UNIX和WINDOWS2000上的ORACLE的差.
.Forms 6i Web发布时性能分析的方.
.Oracle中三种上载文件技术(一).
.ORACLE SQL性能优化系列 (八).
.Oracle数据库备份与恢复的三种方.
.oracle同时向多表插入数据.
.有关系统和X正常运行的两个问题.

在9i里对基于函数的索引进行仅索引扫描

发表日期:2008-2-9



  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.任何指定的数据列都有众多的内置函数可用,因此更有可能的情况是:会存在完全匹配查询的索引。
上一篇:Oracle 9i取得建表和索引 人气:1148
下一篇:忘却Oracle的5个方面 人气:514
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐