ZBLOG

mysql 索引失效场景demo

场景一:模糊查询中使用通配符

假设有一张用户表user,其中有一个字段为username,我们想要根据用户名进行模糊查询,SQL语句如下:

SELECT * FROM user WHERE username LIKE '%smith%';

这样的查询会导致索引失效,因为LIKE操作符中包含了通配符%,MySQL无法使用索引进行匹配。解决方法是将查询条件改为以通配符开头的方式,例如:

SELECT * FROM user WHERE username LIKE 'smith%';

这样的查询可以利用索引进行加速。

场景二:对索引列进行函数操作

如果在查询中对索引列进行函数操作,也会导致索引失效。例如:

SELECT * FROM user WHERE YEAR(create_time) = 2021;

这样的查询无法利用create_time字段上的索引,可以考虑增加一个新的字段year来存储年份信息,并在查询时使用该字段:

ALTER TABLE user ADD COLUMN year INT NOT NULL DEFAULT 0;
UPDATE user SET year = YEAR(create_time);
SELECT * FROM user WHERE year = 2021;

这样可以利用year字段上的索引进行查询。

场景三:使用OR连接多个条件

在查询中使用OR连接多个条件也会导致索引失效,例如:

SELECT * FROM user WHERE username = 'smith' OR age = 30;

这样的查询无法利用username和age上的索引,可以考虑拆分成两个查询并用UNION连接:

SELECT * FROM user WHERE username = 'smith'
UNION
SELECT * FROM user WHERE age = 30;

这样可以分别利用username和age上的索引进行查询。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=1829

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?