加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ORACLE 查询不走索引的原因以及强制索引

发布时间:2020-12-12 13:18:40 所属栏目:百科 来源:网络整理
导读:索引失效的原因分析: 或者单独的,,(有时会用到,有时不会) 有时间范围查询; like "%_" 百分号在前. 表没分析(统计信息最好定期收集,以业务的不同确定不同的收集周期,在新增的索引有可能没有收集 ,那么就会导致索引失效) 解决方法: 分析方法有一下几

索引失效的原因分析:

  • <>或者单独的>,<,(有时会用到,有时不会)
  • 有时间范围查询;
  • like "%_" 百分号在前.
  • 表没分析(统计信息最好定期收集,以业务的不同确定不同的收集周期,在新增的索引有可能没有收集 ,那么就会导致索引失效)

  解决方法:

    分析方法有一下几种:
    analyze table t1 compute statistics fortable;?--针对表收集信息

    analyze table t2 compute statistics for allcolumns;?--针对表字段收集信息

    analyze table t3 compute statistics for all indexescolumns;?--收集索引字段信息

    analyze table t4 computestatistics;???????--收集表,表字段,索引信息

    analyze table t5 compute statistics for allindexes;?????????--收集索引信息

    analyze table t6 compute statistics for table for all indexesfor allcolumns;???--

    --收集表,索引,表字段信息

  • 单独引用复合索引里非第一位置的索引列.
  • 字符型字段为数字时在where条件里不添加引号.
  • 对索引列进行运算.需要建立函数索引.
  • not in,not exist.
  • 当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
  • 索引失效。
  • 基于cost成本分析(Oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上;

  解决办法:

    在这种条件下 oracle会认为索引更占资源,就默认不走索引了。这种情况如果觉得索引快的 不妨试试强制索引?

?    select ??/*+INDEX(t IDEX_HZYB_JSJL_BDJSRQ)*/? ?from hzyb_jsjl t
?    where BDJSRQ >TO_DATE(‘‘,‘‘);
    其中T是 表名 ??IDEX_HZYB_JSJL_BDJSRQ 是表的索引

  • 有时都考虑到了 但就是不走索引,drop了从建试试在
  • B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null ? 都会走
  • 联合索引 is not null 只要在建立的索引列(不分先后)都会走,?

in null时 ? 必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,其他建立索引的列可以是is null(但必须在所有列都满足is null的时候),或者=一个值;
当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),以上两种情况索引都会走。其他情况不会走。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读