数据库开发小知识普及五--SQL什么情况下不走索引呢?

1.索引逻辑失效

(1)用索引反而代价变高

当应用索引检索数据,返回大量记录时,这时候用索引肯定有错,索引范围查询访问一般适合返回少量记录的情况,否则全表扫描或者全索引扫描就可以。

(2)发生索引列的类型转换

在表字段设计时,有一个非常重要的原则,什么类型的字段存什么类型的值,否则就会发生隐式类型转换。例如:

Create table t_col_type(id varchar2(20));

Select * from t_col_type where id=6;

这种情况,id列会被to_number(id)=6。无法使用索引。

(3)对索引进行了各种运算,或者对索引列使用函数

Select * from t where object_id/2=:id;

Select * from t where upper(name)='ABC';

(4)统计信息不准确

当表的统计信息不准确时,可能导致SQL不走索引,或者走错误的索引,SQL变慢,因此定时收集统计信息很重要。

2.索引物理失效

(1)move操作会导致索引失效

Alter table t move;--move是一个危险系数非常高的操作,它可以收缩表降低高水位,却会导致索引失效,需要重建索引。

(2)分区表导致全局索引失效的操作

所有的全局索引,truncate、drop、split、exchange分区,会导致索引失效。split分区也会导致局部索引失效。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值