索引失效的5种常见写法:为什么加了索引查询还是慢

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
云数据库 PolarDB MySQL 版,列存表分析加速 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 今天分享5种常见索引失效场景(函数/运算/类型不匹配/LIKE前置%/OR混用),附EXPLAIN速查技巧——专治“建了索引却不用”的玄学慢查询,实际案例经验助你少走弯路!

我是小耶,干运营半路出家的野生DBA——写功课只是为了我踩过的坑,你们别再踩了!

很多新手给字段加了索引,查询还是慢。不是索引没用,是你写的SQL让它没法用。

5种索引装睡的场景

1. 对索引列用了函数

WHERE DATE(order_date) = '2026-04-23'   -- ❌
WHERE order_date = '2026-04-23'        -- ✅

2. 对索引列做了运算

WHERE price + 10 > 100   -- ❌
WHERE price > 90         -- ✅

3. 类型不匹配

WHERE phone = 13800000000   -- ❌ phone是varchar,没加引号
WHERE phone = '13800000000' -- ✅

4. LIKE前置通配符

WHERE name LIKE '%张三'   -- ❌ 最前面的%导致索引失效
WHERE name LIKE '张三%'   -- ✅ 前缀匹配可用索引

5. OR连接的不同列,只有部分有索引

WHERE id = 1 OR name = '张三'   -- 只有id有索引,name没有,整个OR会全表扫描

快速验证方法

写完SQL,在前面加EXPLAIN。看key列:如果显示NULL,说明索引没用到;如果显示你建的索引名,那就放心了。

小耶在手,SQL不愁。

你有没有遇到过“明明建了索引,就是不走”的玄学情况?评论区分享,一起破案。

相关文章
|
4月前
|
缓存 开发工具 git
【踩坑】IDEA提交Git .gitignore忽略文件不起作用
.gitignore只能忽略未跟踪的文件,若文件已被提交,则需先清除缓存。通过执行`git rm -r --cached .`、`git add .`和`git commit`命令,可重新应用.gitignore规则,彻底忽略指定目录如target和.idea。
1613 9
|
5月前
|
安全 Cloud Native Serverless
2025数字员工技术选型白皮书:阿里云/亚马逊等5款产品云原生能力实测
本文深度评测阿里云、亚马逊、科大讯飞、玄晶引擎、安恒五款数字员工,围绕架构兼容性、开发友好度、性能稳定性三大维度,结合实测数据与企业案例,为开发者提供选型指南与避坑建议。
694 5
|
1月前
|
存储 人工智能 BI
Coze开发自能体的费用
Coze(扣子)2026年全面升级计费体系,分国内版(coze.cn,订阅+资源包)与国际版(coze.com,点数制)。国内版含免费/进阶/高阶/企业四档;国际版按模型消耗Credits,GPT-4o等高价、GPT-3.5等低价。另含API调用、商业流量、知识库存储等潜在费用。个人测试选免费版,商用推荐进阶版。(239字)
|
5月前
|
存储 弹性计算 网络协议
5 分钟构建企业级域控:AD DS 一键部署与实战指南
Active Directory 域服务(AD DS)不仅是企业级身份管理的基石,更是您实现**集中认证、策略统管、安全高效**IT架构的核心引擎。
|
5月前
|
Java 应用服务中间件 数据库
Tomcat底层原理与实战全解析
本文全面解析Tomcat的底层原理与实战应用。作为轻量级JavaEE容器,Tomcat由HTTP服务器和Servlet容器组成,采用分层架构(Server→Service→Engine→Host→Context)。文章详细讲解请求处理流程、安装配置优化、Web应用部署方式,并提供SpringBoot+Tomcat的完整实战案例。针对生产环境,重点介绍性能优化策略(JVM调优、Connector配置)、故障排查工具(jstack、jmap)以及高可用方案(Nginx负载均衡+Redis会话共享)。
705 2
vue项目使用elementui上传组件 打包后报错t.upload.addEventListener is not a function的解决方案
今天和大家分享一个报错的解决方案 背景 项目打包部署到宝塔上后,打开网页,上传东西时出现了一个报错,但是在本地开发环境是没有问题的。
vue项目使用elementui上传组件 打包后报错t.upload.addEventListener is not a function的解决方案
|
6月前
|
Java Maven
Java打包时,本地仓库有jar 包,Maven打包却还去远程拉取
Maven打包时若因网络或权限问题导致依赖下载失败,即使手动添加jar包仍报错,可删除本地仓库对应文件夹下的 `_remote.repositories` 和 `.lastUpdated` 文件后重新打包。常用命令包括 `mvn clean`、`mvn clean package`,以及跳过测试的 `-DskipTests` 或 `-Dmaven.test.skip=true` 参数,提升打包效率。
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
2575 20
|
存储 关系型数据库 MySQL
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
|
SQL JavaScript Java
mybatis-flex入门体验(一)
`shigen`,一个专注于Java、Python、Vue和Shell的博主,分享成长和认知。近期探索了`mybatis-flex`,通过官网学习了代码生成和编码体验。配置数据源和依赖后,利用示例代码生成了符合Lombok+MyBatis Plus规范的实体和Mapper。此外,展示了如何配置SQL打印,并用测试代码演示了查询、多条件查询和更新操作。`mybatis-flex`的亮点在于流畅的查询语法和连表查询功能。后续将分享更多关于连表查询的实践。一起学习,每天进步!
509 0
mybatis-flex入门体验(一)