预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共45页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

oracle数据库索引失效oracle数据库索引失效(整理10篇),下面小编为大家整理过的oracle数据库索引失效,欢迎阅读与借鉴!篇1:oracle数据库索引失效这篇文章主要介绍了oracle数据库索引失效的原因及如何避免索引失效,有需要的小伙伴参考下,今天一个同事突然问我索引为什么失效。说实在的,失效的原因有多种:但是如果是同样的sql如果在之前能够使用到索引,那么现在使用不到索引,以下几种主要情况:1.随着表的增长,where条件出来的数据太多,大于15%,使得索引失效(会导致CBO计算走索引花费大于走全表)2.统计信息失效需要重新搜集统计信息3.索引本身失效需要重建索引下面是一些不会使用到索引的原因索引失效1)没有查询条件,或者查询条件没有建立索引2)在查询条件上没有使用引导列3)查询的数量是大表的大部分,应该是30%以上。4)索引本身失效5)查询条件使用函数在索引列上(见12)6)对小表查询7)提示不使用索引8)统计数据不真实9)CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索引小。10)隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效.错误的例子:select*fromtestwheretu_mdn=13333333333;正确的例子:select*fromtestwheretu_mdn=‘13333333333‘;11)对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,!等)错误的例子:select*fromtestwhereid-1=9;正确的例子:select*fromtestwhereid=10;12)使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.错误的例子:select*fromtestwhereround(id)=10;说明,此时id的索引已经不起作用了正确的例子:首先建立函数索引,createindextest_id_fbi_idxontest(round(id));然后select*fromtestwhereround(id)=10;这时函数索引起作用了1,2,单独的>,3,like“%_”百分号在前.4,表没分析.5,单独引用复合索引里非第一位置的索引列.6,字符型字段为数字时在where条件里不添加引号.7,对索引列进行运算.需要建立函数索引.8,notin,notexist.9,当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况,10,索引失效。11,基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上12,有时都考虑到了但就是不走索引,drop了从建试试在13,B-tree索引isnull不会走,isnotnull会走,位图索引isnull,isnotnull都会走14,联合索引isnotnull只要在建立的索引列(不分先后)都会走,innull时必须要和建立索引第一列一起使用,当建立索引第一位置条件是isnull时,其他建立索引的列可以是isnull(但必须在所有列都满足isnull的时候),或者=一个值;当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括isnull=一个值),以上两种情况索引都会走。其他情况不会走。篇2:Oracle的索引原理数据库Oracle提供了大量索引选项,知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚至几天的进Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚至几天的进程在几分钟得以完成,这样会使您立刻成为一位英雄。这篇文章就将简单的讨论每个索引选项。主要有以下内容:[1]基本的索引概念查询DBA_INDEXES视图可得到表中所有索引的列表,注意只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。[2]组合索引当某个索引包含有多个已索引的列时,称这个索引为组合(concatented)索引。在Oracle9i引入跳跃式扫描的索引访问方法之前,查询只能在有限条件下使用该索引。比如:表emp有一个组合索引键,该