精华内容
下载资源
问答
  • 2021-05-07 02:29:07

    容易引起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 只要在建立的索引列(不分先后)都会走。

    更多相关内容
  • 当某张表建立时间比较长以及该表频繁的进行插入,更新操作时,将出现索引失效问题。
  • oracle索引失效的总结

    2017-08-17 10:23:01
    oracle索引失效的总结
  • oracle数据库索引失效

    2021-01-19 22:45:53
    1. 随着表的增长,where条件出来的数据太多,大于15%,使得索引失效(会导致CBO计算走索引花费大于走全表) 2. 统计信息失效 需要重新搜集统计信息 3. 索引本身失效 需要重建索引 下面是一些不会使用到索引的原因 ...
  • oracle 索引失效的原因

    2021-05-08 05:19:36
    引起oracle索引失效的原因很多: 1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。 创建函数索引方式: 表dept,有col_1,col_2,现在对col_1做upper函数索引 这样...

    引起oracle索引失效的原因很多: 1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。 创建函数索引方式: 表dept,有col_1,col_2,现在对col_1做upper函数索引 这样就行了 CREATE INDEX index_name ON dept(upper(col_1)); 函数索引是基于代价的优化方式-CBO,(在Oracle8及以后的版本,Oracle强列推荐用CBO的方式,而非RBO),所以表必须经过analyze才可以使用,或者使用hints才可以 2、新建的表还没来得及生成统计信息,分析一下就好了 3、基于cost的成本分析,访问的表过小,使用全表扫描的消耗小于使用索引。 4、使用<>、not in 、not exist,对于这三种情况大多数情况下认为结果集很大,一般大于5%-15%就不走索引而走FTS。 5、单独的>、

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    索引失效

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

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

    展开全文
  • oracle 索引失效原因_汇总

    千次阅读 2021-05-07 05:47:31
    4) 索引本身失效5) 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等)错误的例子:select * from test where id-1=9; 正确的例子:select * from test where id=10;6) 对小表查...

    5268f80b9b1e01f982625ef6fac83ca1.png

    1) 没有查询条件,或者查询条件没有建立索引

    2) 在查询条件上没有使用引导列

    3) 查询的数量是大表的大部分,应该是30%以上。

    4) 索引本身失效

    5) 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等)

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

    6) 对小表查询

    7) 提示不使用索引

    8) 统计数据不真实

    9) CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索引小。

    10)隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.

    由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给数据库,

    这样会导致索引失效. 错误的例子:select * from test where tu_mdn=13333333333;

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

    12) 1,<> 2,单独的>,

    13) like "%_" 百分号在前.

    14) 没做表分析.

    15) 单独引用复合索引里非第一位置的索引列.

    16) 字符型字段为数字时在where条件里不添加引号.

    17) 对索引列进行运算.需要建立函数索引.

    18) not in ,not exist.

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

    20) B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走

    21) 联合索引

    is not null 只要在建立的索引列(不分先后)都会走,

    in null时 必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,

    其他建立索引的列可以是is null(但必须在所有列 都满足is null的时候),

    或者=一个值; 当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),

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

    ---------

    1、MyISAM 存储引擎索引键长度总和不能超过1000 字节;

    2、BLOB 和TEXT 类型的列只能创建前缀索引;

    3、MySQL 目前不支持函数索引;

    4、使用不等于(!= 或者<>)的时候MySQL 无法使用索引;

    5、过滤字段使用了函数运算后(如abs(column)),MySQL 无法使用索引;

    6、Join 语句中Join 条件字段类型不一致的时候MySQL 无法使用索引;

    7、使用LIKE 操作的时候如果条件以通配符开始( ‘%abc...‘)MySQL 无法使用索引;

    8、使用非等值查询的时候MySQL 无法使用Hash 索引;

    9、在我们使用索引的时候,需要注意上面的这些限制,尤其是要注意无法使用索引的情况,因为这很容易让我们因为疏忽而造成极大的性能隐患。

    oracle 索引失效原因_汇总

    标签:这一   先后   not   计数   lob   开始   sel   ash   pre

    1428d0e076c3959ab11d28a39bc84fab.png

    5268f80b9b1e01f982625ef6fac83ca1.png

    本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

    本文系统来源:https://www.cnblogs.com/651434092qq/p/11209261.html

    展开全文
  • 一、Oracle索引失效的原因1使用否定关键字!=, <> ,not in,not existselect * fromdrama where id <> 1,Mysql不会2单独使用不等式关键字直接用>或3使用null关键字is null或is not null 可能会失效4左...

    一、Oracle索引失效的原因

    1使用否定关键字

    !=, <> ,not in,not exist

    select * fromdrama where id <> 1,Mysql不会

    2单独使用不等式关键字

    直接用>或

    3使用null关键字

    is null或is not null 可能会失效

    4左模糊或全模糊

    like %放在前面

    5索引列用函数

    6条件中字符型字段赋值数字

    7使用复合索引, 不使用第一个索引列

    8索引失效

    9刚建立新表,没有生成统计信息,需要分析一下

    10索引不如全表查询快,表比较小或查询10%以上的列

    二、查看索引是否有效的SQL

    1、explain plan for

    select * from A  where B='xx'

    2、select * from table(dbms_xplan.display)

    三、解决办法

    1在特定场景下使用索引

    不在小表使用索引,不在列值重复多的列建索引。如不在“性别”,“流转状态”列建索引。

    2sql慎用关键字

    null,not , > <

    3重建索引

    4强制使用索引

    展开全文
  • oracle 索引失效原因及解决方法一、以下的方法会引起索引失效‍1,<>2,单独的>,3,like "%_" 百分号在前.4,表没分析.5,单独引用复合索引里非第一位置的索引列.6,字符型字段为数字时在where条件里不添加引号.7...
  • comm 列的索引失效 3. WHERE 子句中使用函数 如果没有使用基于函数的索引,那么 where 子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。例如: select * from staff where trunc(birthdate) = '01...
  • 一、以下的方法會引起索引失效‍1,<>2,單獨的>,3,like "%_" 百分號在前.4,表沒分析.5,單獨引用復合索引里非第一位置的索引列.6,字符型字段為數字時在where條件里不添加引號.7,對索引列進行運算.需要建立函...
  • Oracle 索引失效的原因

    千次阅读 2019-08-27 15:29:51
    容易引起oracle索引失效的原因很多: 1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。 2、新建的表还没来得及生成统计信息,分析一下就好了 3、基于cost的...
  • 有时候建立索引的时候不走索引,排除了字段数据问题和sql写法问题,索引失效的问题之外,还得考虑是统计信息过旧,得重新收集。查看表的统计信息,看 user_index 的last_analyze(索引),看user_tab_col_statistics ...
  • 失效查询监控语句: 普通索引: SELECT owner, index_name, tablespace_name FROM dba_indexes WHERE status = 'UNUSABLE'; 分区索引: SELECT index_owner, index_name, partition_name, tablespace_name FROM...
  • oracle 索引失效的场景

    2018-11-23 22:05:11
    1、索引列使用如下条件,like '%abc%'、is null/is not null、!=或&lt;&gt;、not in(注:可以使用in) not in 应该改为not exists  2、索引列使用了函数,例如 select * from t where f(index_column) =...
  • Oracle 索引失效

    千次阅读 2019-03-18 21:55:16
    1、条件字段选择性弱,查出的结果集较大,不走索引; 强制索引:/*+INDEX(表名,索引名字)*/ 的方法,但是这种方法有个缺点,如果索引 的名字改变了,就会导致程序重新改动,大大增加维护成本。? 索引提示还可以使 ...
  • Oracle索引失效-like

    2021-05-03 00:49:02
    在sql语句中like时需要特别注意,有可能会使索引失效[@more@]测试:建表,然后在测试字段上加索引SELECT * FROM BASE_ROLE eWHERE e.role_name LIKE '%角%'字段上role_name上有索引,但却走的是全表扫描SELECT * ...
  • 如果是hash 分区,新加分区及有数据移动的分区的local 索引和glocal 索引会被置为unuseable, 需要重新编译 对于分区表中索引失效要重建索引 select 'alter index '||t.index_name||' rebuild partition '||t....
  • 问题的起因是DBA通知说在一套之前上线的系统中,对日期创建索引无法生效,导致大量的日期查询效率无法通过创建索引得到提升。通过分析得出如下的结论:在JDBC中一般通过prepareStatement的各种setXxx()来传递参数,...
  • 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracl...
  • Oracle索引失效和重建

    千次阅读 2016-10-26 15:47:07
    今天在数据库执行一段SQL,某个栏位直接赋值则返回结果正常;...研究了很久,最后在执行PL/SQL Developer的分析器时,发现报错索引失效,只要执行alter index INDEX_NAME rebuild重建索引即可,特此记录。
  • oracle索引失效

    2018-12-01 23:50:43
    1、Not Null/Null 如果某列建立索引,当进行Select * ... 则会是索引失效。 2、索引列上不要使用函数,SELECT Col FROM tbl WHERE substr(name ,1 ,3 ) = ‘ABC’ 或者SELECT Col FROM tbl WHERE name LIKE ‘%ABC%’...
  • 最近遇到一个Oracle SQL语句的性能问题,修改功能之前的运行时间平均为0.3s,可是添加新功能后,时间达到了4~5s。虽然几张表的数据量都比较大(都在百万级以上),但是也都有正确创建索引,不知道到底慢在了哪里,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,362
精华内容 12,144
关键字:

oracle索引失效

友情链接: MISRA C 2012 TC1.rar