Mysql优化---避免索引失效的原则

本文介绍了SQL索引优化的关键原则,包括复合索引的最佳实践、避免索引失效的操作指南及如何利用索引覆盖来提高查询效率等。通过遵循这些原则,可以显著提升数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7. 避免索引失效的一些原则

(1)复合索引
a. 复合索引,不要跨列或无序使用(最佳左前缀)
(a, b , c )
b. 复合索引,尽量使用全索引匹配
(a, b, c)
(2)不要在索引上进行任何操作(计算、函数、类型转换),否则索引失效。
select … where A.x = … --假设x为索引,不要(2*A.X),导致索引失效。
(3)复合索引不能使用不等于(!= 或 < 或 >)或is null (is not null),否则自身以及右侧所有全部失效。
select … from… where A.x != 2

体验概率情况(< > in): 原因是服务层中有SQL优化器,可能会影响我们的优化。
drop index idx_typeid on book;
复合索引如果有>,<,=, 则右侧索引可能全失效(概率)

我们学习索引优化,是一个大部分情况适用的结论,但由于SQL优化器等原因 该结论不是100%正确。

  • 一般而言,范围查询(<, >, in), 之后的索引失效

(4)补救。尽量使用索引覆盖(using index)
select a, b from …where a=… and b=…

(5)like 尽量以“常量”开头,不要以‘%’开头,否则索引失效
select … from …where a like ‘%_a%’
如果一定要使用,可以改为索引覆盖

(6)尽量不要使用类型转换(显示,隐式),否则索引失效
select * from teacher where tname = 123; //程序底层将123->‘123’,即进行了类型转换

(7)尽量不要使用or, 否则索引失效
select * from teacher where tname=‘’ or tcid > 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值