搜索
首页 电脑/网络 软件 系统软件

如何在Oracle9i里基于函数的仅索引扫?

如何在Oracle9i里基于函数的仅索引扫描

全部回答

2017-07-26

44 0
    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。任何指定的数据列都有众多的内置函数可用,因此更有可能的情况是:会存在完全匹配查询的索引。
  

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
系统软件
硬件
电脑装机
程序设计
互联网
操作系统/系统故障
笔记本电脑
反病毒
百度
软件
软件
系统软件
多媒体软件
办公软件
网络软件
图像处理软件
系统软件
系统软件
举报
举报原因(必选):
取消确定举报