oracle index索引介绍

oracle index索引介绍

ID:6321817

大小:159.00 KB

页数:34页

时间:2018-01-10

oracle index索引介绍_第1页
oracle index索引介绍_第2页
oracle index索引介绍_第3页
oracle index索引介绍_第4页
oracle index索引介绍_第5页
资源描述:

《oracle index索引介绍》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ORACLEindex索引介绍2008-06-0522:21概述   索引在各种关系型数据库系统中都是举足轻重的组成部分,其对于提高检索数据的速度起至关重要的作用。在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引等。Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚

2、至几天的进程在几分钟得以完成,这样会使您立刻成为一位英雄。这篇文章就将简单的讨论每个索引选项。主要有以下内容:[1]基本的索引概念查询DBA_INDEXES视图可得到表中所有索引的列表,注意只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。[2]组合索引当某个索引包含有多个已索引的列时,称这个索引为组合(concatented)索引。在Oracle9i引入跳跃式扫描的索引访问方法之前,查询只能在有限条件下使用该索引。比如:表

3、emp有一个组合索引键,该索引包含了empno、ename和deptno。在Oracle9i之前除非在where之句中对第一列(empno)指定一个值,否则就不能使用这个索引键进行一次范围扫描。特别注意:在Oracle9i之前,只有在使用到索引的前导索引时才可以使用组合索引!  [3]ORACLEROWID通过每个行的ROWID,索引Oracle提供了访问单行数据的能力。ROWID其实就是直接指向单独行的线路图。如果想检查重复值或是其他对ROWID本身的引用,可以在任何表中使用和指定rowid列。[4]限制索引限制索引

4、是一些没有经验的开发人员经常犯的错误之一。在SQL中有很多陷阱会使一些索引无法使用。下面讨论一些常见的问题:4.1使用不等于操作符(<>、!=)下面的查询即使在cust_rating列有一个索引,查询语句仍然执行一次全表扫描。  selectcust_Id,cust_name  from customers  where cust_rating<>'aa';把上面的语句改成如下的查询语句,这样,在采用基于规则的优化器而不是基于代价的优化器(更智能)时,将会使用索引。  selectcust_Id,cust_name  

5、from customers  where cust_rating<'aa'orcust_rating>'aa';特别注意:通过把不等于操作符改成OR条件,就可以使用索引,以避免全表扫描。4.2使用ISNULL或ISNOTNULL使用ISNULL或ISNOTNULL同样会限制索引的使用。因为NULL值并没有被定义。在SQL语句中使用NULL会有很多的麻烦。因此建议开发人员在建表时,把需要索引的列设成NOTNULL。如果被索引的列在某些行中存在NULL值,就不会使用这个索引(除非索引是一个位图索引,关于位图索引在稍后在详

6、细讨论)。4.3使用函数如果不使用基于函数的索引,那么在SQL语句的WHERE子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。下面的查询不会使用索引(只要它不是基于函数的索引)selectempno,ename,deptno  from emp  where trunc(hiredate)='01-MAY-81';把上面的语句改成下面的语句,这样就可以通过索引进行查找。 selectempno,ename,deptno  from emp  where hiredate<(to_date('01-MAY-81

7、')+0.9999);4.4比较不匹配的数据类型比较不匹配的数据类型也是比较难于发现的性能问题之一。注意下面查询的例子,account_number是一个VARCHAR2类型,在account_number字段上有索引。下面的语句将执行全表扫描。  selectbank_name,address,city,state,zip  from banks  where account_number=990354;Oracle可以自动把where子句变成to_number(account_number)=990354,这样就限

8、制了索引的使用,改成下面的查询就可以使用索引:  selectbank_name,address,city,state,zip  from banks  where account_number='990354';特别注意:不匹配的数据类型之间比较会让Oracle自动限制索引的使用,即便对这个查询执行ExplainPlan也不能让

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。