Oracle数据库索引使用及索引失效总结

  容易引起oracle索引失效的原因很多:

  1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。

  2、新建的表还没来得及生成统计信息,分析一下就好了

  3、基于cost的成本分析,访问的表过小,使用全表扫描的消耗小于使用索引。

  4、使用<>、not in 、not exist,对于这三种情况大多数情况下认为结果集很大,一般大于5%-15%就不走索引而走FTS。

  5、单独的>、<。

  6、like "%_" 百分号在前。

  7、单独引用复合索引里非第一位置的索引列。

  8、字符型字段为数字时在where条件里不添加引号。

  9、当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。

  10、索引失效,可以考虑重建索引,rebuild online。

  11、B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null  都会走、联合索引 is not null 只要在建立的索引列(不分先后)都会走。

时间: 2024-10-08 00:28:47

Oracle数据库索引使用及索引失效总结的相关文章

ORACLE数据库编程

第一章 Oracle数据库基本概念 一.介绍 Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为 核心的一组软件产品,是目前最流行的客户/服务器(Client/Server,C/S)或 浏览器/服务器(Browser/Server,B/S)体系结构的数据库之一.二.特点1.完整的数据管理功能:数据的大量性数据的保存的持久性数据的共享性数据的可靠性Oracle优点:可用性强可扩展性强数据安全性强稳定性强三.Oracle数据库的辑逻结构1.表空间一个数据库被分割为数个被称作

浅谈Oracle数据库分区表

Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,之前,只听过分区的大名,却总未用过,最近简单学习了一下,总结如下,不对之处,还希望朋友们多多指点,交流! 1.表空间及分区表的概念    2.表分区的具体作用    3.表分区的优缺点    4.表分区的几种类型及操作方法    5.对表分区的维护性操作. ( 1.) 表空间及分区表的概念    表空间:       是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间.

SQL Server和Oracle数据库索引介绍

SQL Server和Oracle数据库索引介绍 1 SQL Server中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.索引包含由表或视图中的一列或多列生成的键.这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行. 表或视图可以包含以下类型的索引: 聚集索引 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行.索引定义中包含聚集索引列.每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序. 只有当表包含聚集索引

oracle数据库索引(转)

.      索引分类Ø  按存储方法分类B*树索引:B*树索引是最常用的索引,其存储结构类似书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引到的具体的书页.一般索引及唯一约束索引都使用B*树索引. 位图索引:位置索引储存在主要用来节省空间,减少Oracle对数据块的访问,它采用位图偏移方式来与表的行ID对应,采用位图索引一般是重复值太多的表字段.位图索引在实际密集型OLTP(数据事务处理)中用得比较少,因为OLTP会对表进行大量的删除.修改.新建操作,Ora

oracle数据库什么情况下创建索引比较好

索引就好象一本字典的目录.凭借字典的目录,我们可以非常迅速的找到我们所需要的条目.数据库也是如此.凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表. 虽 然说,在表中是否创建索引,不会影响到Oracle数据库的使用,也不会影响数据库语句的使用.这就好像即使字典没有目录的话,用户仍然可以使用它一 样.可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其不得不翻遍整本字典.数据库也是如此.若没有建立相关索引的话,则数据库在查询记录的 时候,不得不去查询整个表

ORACLE数据库中创建、删除--同义词、视图、索引、序列

select * from emp; create synonym emp_ny for emp; create public synonym pub_emp_ny for employees;--创建公有同义词 DROP SYNONYM EMP_NY;--删除同义词 DROP PUBLIC SYNONYM PUB_EMP_NY;--删除公有同义词 查看已有同义词 SELECT * FROM SYS.ALL_SYNONYMS WHERE table_name='DIC_TRIPMODE'; CR

oracle数据库表约束、视图、索引—该记录为本人以前微博的文章

一.Oracle 数据库常用操作续关于创建表时创建约束1.创建表的时候增加约束----约束是定义表中的数据应该遵循的规则或者满足的条件----约束是建立在列上的,让某一列或者某几列数据之间有约束----约束可以在创建的表的同时创建约束,也可以在创建表之后再创建约束----约束分为表级约束和列级约束,定义的方式不同,但是效果是相同的----列级约束:列名  数据类型 [default 默认值] [列级约束1  列级约束2--]----表级约束:constraint 约束名称 约束类型(列名)---

Oracle数据库对象,同义词、序列、视图、索引

数据库对象简介 Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括: 同义词是现有对象的一个别名. 简化SQL语句 隐藏对象的名称和所有者 提供对对象的公共访问 同义词共有两种类型: CREATE USER test IDENTIFIED BY test; GRANT CONNECT , CREATE SYNONYM TO test; GRANT SELECT ON SCOTT.EMP TO test; GRANT DELETE ON S

浅谈oracle数据库索引

[什么是索引] 在关系型数据库中,索引是一种和表有关的数据结构,它可以使查询的sql语句执行的更快.其实索引就如同图书的目录,我们可以根据目录中的页码快速的找到所需的内容. 编写一本书,只有章节内容定好之后再设置目录:数据库索引也是一样,只有先插入好数据,再建立索引. [为何索引可提高查询效率] 因为DB在执行一条sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件就加入搜索结果集合.如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行

ORA-01502 oracle数据库 index索引的两种形式

目前的项目中,我们在跑批次的时候,有个SP总是报错 "ORA-01502: index 'WBILL_102.PK_A_NOTWEB_ACT_PROVINCE_M' or partition of such index is in unusable state" ,解决办法就是重建索引,ALTER INDEX IN_AA REBUILD; 但是解决完之后,在跑批还是报这个错误,这就让我需要考虑,产生这个问题的原因是什么! 我的错误场景还原: 有个表 CUS_ASSET_MONTH,主键