今天一个同事突然问我索引为什么失效。说实在的,失效的原因有多种:

但是如果是同样的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 * from test where tu_mdn=13333333333;

正确的例子:select * from test where tu_mdn=‘13333333333‘;

11)对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)

错误的例子:select * from test where id-1=9;

正确的例子:select * from test where id=10;

12)使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.

错误的例子:select * from test where round(id)=10;

说明,此时id的索引已经不起作用了 正确的例子:首先建立函数索引,

create index test_id_fbi_idx on test(round(id));

然后 select * from test where round(id)=10; 这时函数索引起作用了 1,<> 2,单独的>,

3,like "%_" 百分号在前.

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 =一个值),

以上两种情况索引都会走。其他情况不会走。

原文:http://www.jb51.net/article/60814.htm

oracle删除数据索引失效,oracle数据库索引失效相关推荐

  1. oracle 删除数据违反约束条件,Oracle启动和禁用约束及删除违反约束的记录

    背景:在数据仓库中批量的导入数据的情况下,如果较多的约束存在那么会增加数据库的负担降低系统导入数据的效率,在这个情况下一般会采取牺牲约束的校验换取系统执行的效率.即禁用约束待数据全部导入成功以后再检查 ...

  2. oracle vm发现无效设置_Oracle数据库编译失效对象相关命令总结大全,值得收藏

    概述 在日常数据库维护过程中,我们会发现数据库中一些对象(包Package.存储过程Procedure.函数Function.视图View.同义词.....)会失效,呈现无效状态(INVALID).有 ...

  3. Oracle删除数据的三种方式

    Oracle删除数据的三种方法 删除表(记录和结构)的语句delete--truncate--drop drop命令 drop table 表名: 例如:删除学生表(student) drop tab ...

  4. Oracle 删除数据后释放数据文件所占磁盘空间

    . . . . . 测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle "高水位"所致,那么 ...

  5. 删除数据oracle,oracle删除数据

    oracle 动态删除,oracle监听之动态和静态注册,oracle删除数据,oracle删除用户 Oracle 删除数据的几种方法_计算机软件及应用_IT/计算机_专业资料.删除... oracl ...

  6. mysql 命令删库名,MySQL控制台删除数据库命令 drop database 数据库名

    MySQL控制台删除数据库命令 drop database 数据库名 分类:数据库| 发布:佚名| 查看: | 发表时间:2014/4/30 命令:drop database 例如:删除名为 camn ...

  7. Oracle删除数据索引

    首先查到表中的现有索引: select * from user_indexes where table_name in ('表名',''); 删除索引: drop index 索引名;

  8. oracle删除数据释放表空间流程

    生产环境:数据库里空间不足,niptest 表空间251G,只使用了17G 再alter database datafile '...../niptest1' resize 10G; 的时候说超出了范 ...

  9. 数据挖掘(9-22):数据离散程度+数据清理+三大相关系数+数据库索引(数据库面试常问)+P值含义及理解

    1.衡量数据离散程度的统计量: 数据的离散程度即衡量一组数据的分散程度如何,其衡量的标准和方式有很多,而具体选择哪一种方式则需要依据实际的数据要求进行抉择. 首先针对不同的衡量方式的应用场景大体归纳如 ...

最新文章

  1. 用Vue框架和后台请求的时候传递的参数的方式
  2. 编码练习——Java-String-API-练习
  3. 2019-12-03 有用的学术网站
  4. Oracle GoldenGate 之--异构平台同步(Mysql到Oracle)
  5. Python表示不甘心,汤姆大叔送书,Python抢书之毫秒级跟进--获取服务器时间
  6. mysql -数据库
  7. matlab直方图匹配,直方图匹配 histogram match
  8. 微软惊天泄漏,Win11 预览版镜像提前出世
  9. 步进电机、伺服电机、舵机的区别与控制(角度、转速)
  10. 笔记本插拔电源屏闪问题
  11. iOS开发-代码分析工具之Infer
  12. java timeunit_java – 了解TimeUnit
  13. [Swift]LeetCode810. 黑板异或游戏 | Chalkboard XOR Game
  14. ELSEVIER期刊论文投稿全流程实例讲解
  15. CentOS 7 配置DNS服务
  16. 快手+中科大 | 全曝光推荐数据集KuaiRec 2.0版本
  17. 科技向善,腾讯“守护者智能反诈中枢”在行动
  18. AlertDialog对话框的使用
  19. 企业要在云优先的趋势下,制定符合业务发展的云计算解决方案
  20. 给swagger的接口添加描述

热门文章

  1. 什么是客户忠诚度?建立忠诚文化的 5 种方法
  2. JsonWebToken是什么?
  3. 海马模拟器 如何通过adb连接
  4. 电信客户流失分析与预测
  5. Nihao Flash3D v1.0稳定版发布
  6. SMOL:Jointly Optimizing Preprocessing and Inference for DNN-based Visual Analytics,VLDB,2020
  7. php png的用法,php – 如何使用PNG的IDAT块?
  8. 如何升级条码阅读器的译码软件?
  9. 《花开半夏》--3 叶向荣(1)
  10. 服务器端文件下载、解压,内网穿透