深入理解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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值