数据库开发小知识普及五--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分区也会导致局部索引失效。

上一篇:获取进程CPU占用率


下一篇:CF1604A Era