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

本文探讨了索引逻辑失效和物理失效的常见原因,包括不当使用索引、类型转换、复杂运算、统计信息不准确等,以及move操作和分区表对索引的影响。提供了解决这些问题的建议,帮助开发者优化查询性能。

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分区也会导致局部索引失效。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值