Oracle 索引不起作用的几种情况:

1,<>
2,单独的>,<,(有时会用到,有时不会)
3,like "%_" 百分号在前.(可采用在建立索引时用reverse(columnName)这种方法处理)
4,表没分析.
5,单独引用复合索引里非第一位置的索引列.
6,字符型字段为数字时在where条件里不添加引号.
7,对索引列进行运算.需要建立函数索引.
8,not in ,not exist.
9,当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
10, 索引失效。
11,基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上
12,有时都考虑到了 但就是不走索引,drop了从建试试在
13,B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null  都会走
14,联合索引 is not null 只要在建立的索引列(不分先后)都会走,
in null时  必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,其他建立索引的列可以是is null(但必须在所有列都满足is null的时候),或者=一个值;
当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),以上两种情况索引都会走。其他情况不会走。

针对情况10的处理:

先可以分析下表,但是分析表的时候会加锁,这个需要注意。语句如下:
analyze table table_name compute statistics

1)导致的原因:
     在SQL*LOADER 加载过程中会维护索引,由于数据量比较大,在SQL*LOADER 加载过程中出现异常情况,导致ORACLE 来不及维护索引,导致索引处于失效状态,影响查询和加载。
     异常情况主要有:在加载过程中杀掉SQL*LOADER 进程,重启,表空间不够等。
查询索引是否失效主要有以下两个视图:
select * from dba_indexes t;
select  * from user_indexes;
2)解决方法:

      重建索引
3)如何重建索引
      a) 查看索引类型
   select  t1.index_name,t1.partitioned from Dba_Indexes t1where t1.Table_Name=upper('CCB_COGNOS_PROD_BALANCE_AA')


            显示:
  1. 索引名称                         是否分区索引
  2. GNOS_PROD_BALANCE_AA_N1      NO
                  索引名称                         是否分区索引CCB_COGNOS_PROD_BALANCE_AA_N1      NO


       b)非分区索引
          重建索引:alter index  cin.CCB_COGNOS_PROD_BALANCE_AA_N1 rebuild online Nologging


        c)分区索引
          找出失效的分区索引:  
select t.Index_Name, t.Partition_Name, t.Tablespace_Name, t.Statusfrom Dba_Ind_Partitions twhere t.Index_Name = 'CMZ_LOCAL_IDX_2'  

重建所有状态为unusable的索引
重建脚本:

  1. ALTER INDEX 索引名
  2. REBUILD PARTITION 分区名
  3. TABLESPACE 表空间名
  4. ONLINE  NOLOGGING

转载于:https://www.cnblogs.com/millen/archive/2010/01/18/1650423.html

Oracle索引失效问题相关推荐

  1. 能使Oracle索引失效的六大限制条件

    例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的.oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了 ...

  2. Oracle 索引失效的六大限制条件

    Oracle 索引失效的六大限制条件 [原创]能使 Oracle 索引失效的六大限制条件 Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反. 例如一张表中有上百万条数据,对某 ...

  3. oracle 检查索引失效,oracle 索引失效原因_汇总

    1) 没有查询条件,或者查询条件没有建立索引 2) 在查询条件上没有使用引导列 3) 查询的数量是大表的大部分,应该是30%以上. 4) 索引本身失效 5) 查询条件使用函数在索引列上,或者对索引列进 ...

  4. 索引忽然失效Oracle,Oracle索引失效原因及解决方法

    一.Oracle索引失效的原因 1使用否定关键字 !=, <> ,not in,not exist select * fromdrama where id <> 1,Mysql ...

  5. oracle对sga统计信息不对,oracle 索引失效原因及解决方法

    一.以下的方法会引起索引失效 ‍1,<> 2,单独的>, 3,like "%_" 百分号在前. 4,表没分析. 5,单独引用复合索引里非第一位置的索引列. 6,字 ...

  6. ORACLE 索引失效的原因与解决

    一.以下的方法会引起索引失效‍1,<> 2,单独的>,<,(有时会用到,有时不会) 3,like "%_" 百分号在前. 4,表没分析. 5,单独引用复合索 ...

  7. oracle 索引-1无效,oracle 索引失效原因及解決方法

    一.以下的方法會引起索引失效 ‍1,<> 2,單獨的>, 3,like "%_" 百分號在前. 4,表沒分析. 5,單獨引用復合索引里非第一位置的索引列. 6,字 ...

  8. ORACLE索引失效,更新统计信息

    有时候建立索引的时候不走索引,排除了字段数据问题和sql写法问题,索引失效的问题之外,还得考虑是统计信息过旧,得重新收集.查看表的统计信息,看 user_index 的last_analyze(索引) ...

  9. oracle字符索引丢失,Timestamp导致Oracle索引失效

    问题的起因是DBA通知说在一套之前上线的系统中,对日期创建索引无法生效,导致大量的日期查询效率无法通过创建索引得到提升.通过分析得出如下的结论: 在JDBC中一般通过prepareStatement的 ...

最新文章

  1. print、println的区别
  2. 在Spring Boot中实现通用Auth认证的几种方式
  3. 笔试训练1 知识点整理
  4. HTML DOCTYPE 标签 -- DTDs 文档类型声明
  5. div 包裹_如何查看到达之前收到的包裹和邮件
  6. leetcode解题记录(二)
  7. 整理 45 道 CSS 基础面试题(附答案)
  8. 《Ext JS权威指南》节选:树的动态加载及节点维护
  9. Idea:新版本Idea底部工具栏Git中没有Local Changes
  10. html开始游戏如何打开,dnf游戏进不去 点击开始-运行,输入CMD
  11. PID参数整定具体方法-圆周倒立摆
  12. 亮道剧学铭:激光雷达系统量产上车没那么容易
  13. U盘引导网络安装CentOS 7
  14. 四年级计算机考试反思,四年级期中考试反思
  15. idear配置工具上传Jar包到服务器并运行
  16. SOLIDWORKS 2014官方正版功能介绍
  17. 17 | 分布式安全:上百个分布式节点,不会出现“内奸”吗?
  18. 计算机ei期刊最新版2018,2018年EI收录中文期刊目录
  19. Android App软件框架搭建
  20. python安装百度aip_Python人工智能-基于百度AI接口

热门文章

  1. 关于jQuery中的offset()和position()
  2. Camtasia Studio 7 试用笔记
  3. Spring Controller Junit例子
  4. Golang闭包陷阱
  5. HTML5手机手写签名开发,html5手写签名
  6. python写入数据到excel中_Python写入数据到Excel
  7. activemq无账户密码登录配置修改
  8. Vue+axios 实现http拦截及vue-router拦截
  9. C# winform 编写记事本
  10. 如何在IE/Edge浏览器中巧妙地传输HTA文件?