精华内容
下载资源
问答
  • 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%’...

    1、Not Null/Null 如果某列建立索引,当进行Select * from emp where depto is not null/is null。 则会是索引失效。
    2、索引列上不要使用函数,SELECT Col FROM tbl WHERE substr(name ,1 ,3 ) = ‘ABC’
    或者SELECT Col FROM tbl WHERE name LIKE ‘%ABC%’ 而SELECT Col FROM tbl WHERE name LIKE ‘ABC%’ 会使用索引。
    3、索引列上不能进行计算SELECT Col FROM tbl WHERE col / 10 > 10 则会使索引失效,应该改成
    SELECT Col FROM tbl WHERE col > 10 * 10
    4、索引列上不要使用NOT ( != 、 <> )如:SELECT Col FROM tbl WHERE col ! = 10
    应该 改成:SELECT Col FROM tbl WHERE col > 10 OR col < 10 。

    展开全文
  • Oracle 索引失效

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

    1、条件字段选择性弱,查出的结果集较大,不走索引;
       强制索引:/*+INDEX(表名,索引名字)*/ 的方法,但是这种方法有个缺点,如果索引
       的名字改变了,就会导致程序重新改动,大大增加维护成本。? 索引提示还可以使
       用列的方法进行,语法是/*+INDEX(表名,(索引列的列表))*/,这种方法即使索引的名
       字变了,也不会导致程序重新改动
    2、where条件等号两边字段类型不同,不走索引;
    3、优化器分析的统计信息陈旧也可能导致不走索引;
    execute dbms_stats.gather_table_stats($USER_NAME,$TABLE_NAME);
    4、索引字段 is null 不走索引;
    5、对于count(*)当索引字段有not null约束时走索引,否则不走索引;
    6、like 后面的字符当首位为通配符时不走索引;
    7、使用不等于操作符如:<>、!= 等不走索引;
    8、索引字段前加了函数或参加了运算不走索引;
    9、索引字段之间用 or ;or 转为union all cbo比较“傻”,它计算出来哪个执行计划的
       cost小就会默认用哪个。cost在计算过程中会取近似值,这会导致有时cbo选择的错误
       的执行计划。同时有时表的信息没有收集正确也会导致实际计算的cost有偏差选择错误
       的执行计划。最后,如果oracle认为走索引不能正确实现sql的目的,这是就是用hint也
       是不会选择索引的。

    如上描述如有不懂,可以扫码关注麒琳技术栈公众号,欢迎在线咨询

    展开全文
  • oracle索引失效的总结

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

    Oracle 索引失效的七大限制条件

    1. 没有 WHERE 子句

    2. 使用 IS NULL 和 IS NOT NULL

      SELECT ... FROM emp WHERE comm IS NULL; comm 列的索引会失效

    3. WHERE 子句中使用函数

      如果没有使用基于函数的索引,那么 where 子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。例如:

      select * from staff where trunc(birthdate) = '01-MAY-82';

      但是把函数应用在条件上,索引是可以生效的,把上面的语句改成下面的语句,就可以通过索引进行查找。

      select * from staff where birthdate < (to_date('01-MAY-82') + 0.9999);

      注意:对于 MIN, MAX 函数,Oracle 仍然使用索引。

    4. 使用 LIKE ‘%T’ 进行模糊查询

    5. WHERE 子句中使用不等于操作

      不等于操作包括:<>, !=, NOT colum >= ?, NOT colum <= ?

      对于这个限制条件可以通过 OR 替代,例如: colum <> 0 ===> colum>0 OR colum<0


    6. 等于和范围索引不会被合并使用

      SELECT emp_id, emp_m, salary_q ... FROM emp WHERE job='manager' AND deptno>10

      job 和 deptno 都是非唯一索引,这种条件下 oracle 不会合并索引,它只会使用第一个索引。

    7. 比较不匹配数据类型

      dept_id是一个varchar2型的字段,在这个字段上有索引,但是下面的语句会执行全表扫描。

      select * from dept where dept_id = 900198;

      这是因为 oracle 会自动把 where 子句转换成 to_number(dept_id)=900198,相当于使用函数,这样就限制了索引的使用。正确写法如下:

      select * from dept where dept_id = '900198';



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

    2017-03-02 11:28:03
    Oracle索引失效的原因 1使用否定关键字 !=, select * fromdrama where id 2单独使用不等式关键字 直接用>或 3使用null关键字 is null或is not null 可能会失效 4左模糊或全模糊 like %放在前面 5索引列用函数 6...

    Oracle索引失效的原因

    1使用否定关键字

    !=, <> ,not in,not exist

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

    2单独使用不等式关键字

    直接用>或<可能会失效,Mysql不会

    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 索引失效原因及解决方法
  • oracle 索引失效原因

    2019-09-26 21:31:34
    oracle 索引失效的原因 分类:Oracle 1) 没有查询条件,或者查询条件没有建立索引2) 在查询条件上没有使用引导列3) 查询的数量是大表的大部分,应该是30%以上。4) 索引本身失效5) 查询条件使用函数在索引...
  • Oracle 索引失效的原因

    2019-08-27 15:29:51
    容易引起oracle索引失效的原因很多: 1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。 2、新建的表还没来得及生成统计信息,分析一下就好了 3、基于cost的...
  • Oracle 索引失效的六大限制条件 【原创】能使 Oracle 索引失效的六大限制条件 Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反。 例如一张表中有上百万条数据,对某个字段加了索引,...
  • 当某张表建立时间比较长以及该表频繁的进行插入,更新操作时,将出现索引失效问题。
  • 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracle...
  • 容易引起oracle索引失效的原因很多:  1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。  2、新建的表还没来得及生成统计信息,分析一下就好了  3、...
  • 一、Oracle索引失效的原因 1使用否定关键字 !=, <> ,not in,not exist select * fromdrama where id <> 1,Mysql不会 2单独使用不等式关键字 直接用>或<可能会失效,Mysql不会 3...
  • 容易引起oracle索引失效的原因很多: 1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。 2、新建的表还没来得及生成统计信息...
  • 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracle...
  • 能使Oracle索引失效的七大限制条件

    千次阅读 2018-03-11 19:52:59
    例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracle...
  • oracle 索引失效总结

    2016-11-28 20:11:04
    oracle数据库而言,一张表上有索引,但是索引失效了,CBO就不会走索引。这里就索引失效进行总结。 索引失效包含物理失效和逻辑失效。 1.1、索引物理失效 表上的索引状态为invalid,,...
  • 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracle...
  • Oracle索引失效的原因

    2014-03-10 14:57:17
    容易引起oracle索引失效的原因很多: 1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。 2、新建的表还没来得及生成统计信息,分析一下就好了 3、基于cost的...
  • 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracl...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,797
精华内容 10,718
关键字:

oracle索引失效