MySQL 索引失效的几种类型以及解决方式

MySQL索引失效的情况有哪些呢?本文就列举下面七种类型以及解决方式。

1. ​索引列不独立

是指被索引的这列不能是表达式的一部分,不能是函数的参数,比如下面的这种情况:

selectid,name,age,salaryfromtable_namewheresalary+1000=6000;

salary 列被用户表达式的计算了,这种情况下索引就会失效,解决方式就是提前计算好条件值,不要让索引列参与表达式计算。

索引字段作为函数的参数:

selectid,name,age,salaryfromtable_namewheresubstring(name,1,3)='luc';

解决方式是什么呢,可以提前计算好条件,不要使用索引,或者可以使用其他的 sql 替换上面的,比如,上面的sql 可以使用 like 来代替:

selectid,name,age,salaryfromtable_namewherenamelike'luc%';

2. 使用了左模糊

selectid,name,age,salaryfromtable_namewherenamelike'%lucs%';

平时尽可能避免用到左模糊,可以这样写:

selectid,name,age,salaryfromtable_namewherenamelike'lucs%';

如果实在避免不了左模糊查询的话,考虑一下搜索引擎 比如 ES。

3. or 查询部分字段没有使用索引

selectid,name,age,salaryfromtable_namewherename='lucs'andage>25

这种情况,可以为 name 和 age 都建立索引,否则会走全表扫描。

4. 字符串条件没有使用 ”

selectid,name,age,salaryfromtable_namewherephone=13088772233

上面的这条 sql phone 字段类型是 字符串类型的,但是没有使用 ‘13088772233 ‘, SQL 就全表扫描了,所以字符串索引要使用 ‘’:

selectid,name,age,salaryfromtable_namewherephone='13088772233 '

5. 不符合最左前缀原则的查询

例如有这样一个组合索引 index(a,b,c):

select*fromtable_namewhereb='1'andc='2'
select*fromtable_namewherec='2'

// 上面这两条 SQL 都是无法走索引执行的

最左原则,就是要最左边的优先存在,我不在的话,你们自己就玩不动了,除非你自己单独创立一个索引,下面这几条 SQL 就可以走索引执行:

select*fromtable_namewherea='asaa'andb='1'andc='2'
select*fromtable_namewherea='asda'andb='1231'
// 上面这两条是走索引的,但是下面这条你觉得索引应该怎么走,是全部走,还是部分走索引?
select*fromtable_namewherea='asda'andc='dsfsdafsfsd'

6. 索引字段没有添加 not null 约束:

select*fromtable_namewhereaisnull;
// 这条sql就无法走索引执行了,is null 条件 不能使用索引,只能全表扫描了
// mysql 官方建议是把字段设置为 not null

所以针对这个情况,在mysql 创建表字段的时候,可以将需要索引的字符串设置为 not null default ” 默认空字符串即可

7. 隐式转换

关联表的两个字段类型不一致会发生隐式转换​:

select*fromtable_namet1leftjointable_name2t2ont1.id=t2.tid;
// 上面这条语句里,如果 t1 表的id 类型和 t2 表的tid 类型不一致的时候,就无法
// 按索引执行了。
// 解决方式就是统一设置字段类型。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/255988.html<

(0)
管理的头像管理
上一篇2025-05-01 02:37
下一篇 2025-05-01 02:39

相关推荐

  • GEO友好的服务器标准有哪些,如何判断?

    SEO友好的服务器,核心标准是速度、稳定性、IP纯净度、安全合规以及服务商资质,缺一不可, 选择服务器不能只看配置,更要关注机房基础设施、网络质量、IP信誉以及服务商是否持牌经营,符合这些条件的服务器,才能让百度爬虫顺利抓取、用户获得良好体验,从而稳定提升排名,速度:服务器响应时间与硬件配置百度最新的核心算法中……

    2026-07-26
    0
  • 机房T3等级是什么意思?,T3机房等级标准有哪些?

    机房T3等级,代表数据中心具备并行维护能力和N+1冗余架构,可用性达到99.982%级别,是当前企业托管业务的主流选择,什么是机房T3等级?核心定义与行业标准机房T3等级源自Uptime Institute的数据中心分级标准,也对应TIA-942的Rating 3等级,这个等级的核心特征就是可并行维护——在任意……

    2026-07-26
    0
  • 服务器SLA服务协议是什么有什么用,有哪些注意事项?

    服务器SLA服务协议是服务商与用户之间关于服务可用性、性能等方面的正式承诺,它直接决定了业务稳定性和运维成本,什么是服务器SLA服务协议服务器SLA(Service Level Agreement)是服务等级协议的缩写,在IDC和云服务领域,它是一份具有法律效力的合同附件,明确服务商必须提供的服务水平基准,这份……

    2026-07-26
    0
  • 站群服务器泛站和泛目录有什么区别?,怎么选

    泛站基于多个独立域名构建独立站点,泛目录则在同一域名下通过目录结构构建内容,这直接影响SEO权重分配和资源管理,什么是泛站和泛目录泛站模式泛站模式使用多个独立域名,每个域名部署独立网站,内容互不关联,这种结构下,每个站点各自积累SEO权重,适合需要大量外链或分散风险的场景,推广不同产品时,泛站能避免单一站点被处……

    2026-07-26
    0
  • 服务器防火墙硬件和软件哪个效果更好,怎么选

    在服务器防火墙的选型中,硬件防火墙与软件防火墙并非非此即彼,而是互补关系,对于追求高安全等级与稳定性的生产环境,采用硬件防火墙做网络层隔离,配合软件防火墙做主机层加固,是当前公认效果最好的组合方案,硬件防火墙与软件防火墙的核心差异性能与资源占用硬件防火墙依托专用ASIC芯片或FPGA处理数据包,转发延迟通常在微……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注