用Oracle9i高级索引技术助力SQL

ZDNet软件频道 时间:2002-04-02 作者:ZDNET CHINA 特稿 |  我要评论()
本文关键词:ORACLE
本文对Oracle9i的索引技术内幕进行了一番讨论,同时还列出相应的代码程序,演示这些索引提高Oracle SQL的查询速度是如何显著。

新推出的ORACLE9i内容翻新,采用了多种新颖的索引算法以显著地提高ORACLE查询数据库的速度。本文对ORACLE9i的索引技术内幕进行了一番讨论,对标准的b-tree索引、位图索引、基于函数的索引以及唯索引表(IOT)等进行了说明。同时,还会列出相应的代码程序,演示这些索引提高ORACLE SQL的查询速度是如何显著。

在数据库操作中,我们该如何避免大型数据表扫描、全数据表扫描和磁盘排序等既费时间又费力气的操作呢?ORACLE9i对这一问题的回答是:采用索引技术,显然,在SQL优化器无法找到有效的方式来完成SQL查询的情况下就要用到索引运算了。我们首先看一下ORACLE9i索引中标准的ORACLE b-tree索引方法。

ORACLE b-tree 索引

ORACLE的索引类型中,最古老、同时也是最常用的就是标准b-tree索引,标准b-tree索引在效率上通常会胜过简单查询。b-tree索引在最早的ORACLE数据库产品中就被引入了而且一直到ORACLE9i都是最常用的查询技术之一(参看图A)。B-tree索引的主要功能目标就是用来避免大规模排序操作。比方说,假设有个SQL查询需要对1万行数据进行排序操作,在这种情况下就会经常用到b-tree索引,有了它,在把数据交付给最终用户的时候就可以不用对数据进行大型排序操作了。

图A

ORACLE b-tree索引



ORACLE在用默认b-tree结构创建索引的时候给用户提供了好几种选择。首先,用户可以对多列索引(连接索引)来提高访问速度。此外,用户还可以让表内各列按照不同的顺序排序。比如,我们可以对last_name列按升序创建一个b-tree索引,然后在这个索引之内再找出第2列(salary)按降序显示salary列。清单A就显示了这一SQL。

显然,b-tree 索引通常是非常适合进行简单的单一查询的,但是在以下条件下就不适合选择这种方法了:

  • 列的基数较低—可区分值少于200个的列无须采用标准的b-tree索引结构。
  • 不支持SQL函数—B-tree索引不能采用ORACLE的内置函数来支持SQL查询。而ORACLE9i提供了各种内置函数,通过它们可以让SQL表达式查询部分索引列。


ORACLE9i问世之前,由于以上的缺陷,在很多情况下,ORACLE SQL优化器不得不执行费时的长表、全表扫描。ORACLE当然认识到了这一点,自然在新版数据库中引入了更为稳固的索引结构类型。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134