深入理解Oracle索引(23):6 种常见不走索引的原因分析

本文分析了数据库查询中常见的六种不使用索引的原因,包括违反复合索引前缀性原理、隐式类型转换、索引列被污染等问题,并提供了相应的解决思路。

      有时候、挺郁闷的、丫的、咋回事啊、就不走索引、
      如果、你发现不走索引、却莫冒失强加自己的意志、
      总得给出理由吧、做个测试先、证实/伪走索引切实明智
      否则、可能会返回错误的结果、也可能导致性能下降
      
      下面就常见不走索引的 6 种原因简要分析一下、做到心里有底
      
      
     
㈠ 违背复合索引"前缀性"原理
         
         谓词没有使用索引前导列
         
      
      ㈡ 隐式转换
         
         举个例子吧、假设我在字符列上建立个索引、然后:
         
         select * from t  where index_column = 8;
         
         这条语句实际上会被等价于:
         
         select * from t where to_number(index_column) = 8;
         
         一定要尽可能避免隐转、
         自己跟自己比就行了、"别人家的孩子"就让他们自己捣鼓去吧
         
         
      ㈢ 索引列被污染
         
         这个我之前的文章有写到、这里就不赘述
         如何避免索引列被污染
         
         第二点、从本质上而言、和三是一样的、都是索引列被污染
         
      
      ㈣ select count(*) from t;(或类似查询)
         
         记住了、索引中的行数并不总是等于基表的行数的、因为
         索引不存储全为NULL 的列
         
      
      ㈤ 25%
         
         25% 虽然是个经验值、但我更愿意这样叫
         当业务需要检索表中数据超过某个阀值、CBO 就认为、走索引没啥意义鸟
         
      
      ㈥ 有一段时间木有分析表了
         
         没有正确的统计信息、哪来的正确的执行计划呢?

         别偷懒哈、

 

 

By David Lin

2013-06-11

Good Luck

         

转载于:https://www.cnblogs.com/snake-hand/archive/2013/06/12/3132906.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值