当前位置: 首页 > news >正文

毕业设计查询慢?先看看 MySQL 索引是不是失效了

毕业设计查询慢?先看看 MySQL 索引是不是失效了

大家好,我是小柚 🐾。最近带毕业设计,发现一个特别常见的问题:很多同学写了 SQL 查询,数据量也不大,但页面就是卡得不行。查了一圈代码,发现问题居然出在索引上——索引失效了

今天我就把毕设项目中常见的 MySQL 索引失效场景整理一下,帮大家避坑。


1. 最常见的坑:索引列用了函数

看看你有没有写过这样的 SQL:

SELECT*FROMuserWHEREYEAR(create_time)=2024;

或者:

SELECT*FROMorderWHERESUBSTRING(order_no,1,4)='2024';

问题:索引列上用了函数,索引直接失效。MySQL 没法用索引快速定位,只能全表扫描。

解决

-- 改成范围查询SELECT*FROMuserWHEREcreate_time>='2024-01-01'ANDcreate_time<'2025-01-01';-- 或者如果必须用到函数,可以考虑把函数结果存成新字段并建索引

2. 字符串不加引号

SELECT*FROMstudentWHEREstudent_no=12345;

如果student_no是 varchar 类型的字段,不加引号会导致隐式类型转换,相当于在索引列上用了函数,索引失效。

解决:字符串必须加引号。

SELECT*FROMstudentWHEREstudent_no='12345';

3. LIKE 百分号写在左边

SELECT*FROMarticleWHEREtitleLIKE'%毕业%';

这个很多同学喜欢用,但%在左边会导致索引失效。

解决

  • 如果业务允许,用 Elasticsearch
  • 如果必须用 MySQL,考虑全文索引(MySQL 5.6+)
  • 或者改需求,接受前缀匹配%毕业

4. OR 导致索引失效

SELECT*FROMuserWHEREusername='zhangsan'ORphone='13800138000';

OR 条件两边只有一边有索引,索引也会失效。

解决:用 UNION 代替 OR。

SELECT*FROMuserWHEREusername='zhangsan'UNIONSELECT*FROMuserWHEREphone='13800138000';

5. 联合索引没遵循最左前缀

假设你建了一个联合索引(status, create_time, user_id)

-- ❌ 失效:跳过第一列SELECT*FROMorderWHEREcreate_time>'2024-01-01';-- ❌ 失效:不是连续使用SELECT*FROMorderWHEREstatus=1ANDuser_id=100;-- ✅ 生效:按顺序使用SELECT*FROMorderWHEREstatus=1ANDcreate_time>'2024-01-01';

联合索引必须从左到右连续使用,中间不能跳过。


6. 表连接顺序不对

SELECT*FROMorderoJOINuseruONo.user_id=u.idWHEREu.status=1;

如果user.status没有索引,这个查询会很慢。

解决:给经常用于条件的字段加索引。


7. 怎么检查索引有没有生效?

EXPLAIN关键字!

EXPLAINSELECT*FROMorderWHEREstatus=1;

重点看typekey

  • type: 最好的是const,然后是eq_refref,最差是ALL(全表扫描)
  • key: 显示使用了哪个索引
  • rows: 预计扫描行数,越少越好

毕业设计项目实战建议

  1. 慢查询日志:MySQL 开启慢查询日志,超过 1 秒的 SQL 自动记录
  2. EXPLAIN 必查:上线前用 EXPLAIN 检查每条重要查询
  3. 索引不是越多越好:每次建索引都要考虑写入成本
  4. 用工具:Navicat、DataGrip 都有可视化索引分析功能

毕业设计项目数据量一般不大,但养成好的索引习惯对你以后工作面试都很有帮助。面试官特别喜欢问索引优化,你要是能把今天这些坑都讲明白,绝对加分。

有问题评论区见,记得点个赞 👍


首发于 2026-02-15

http://www.jsqmd.com/news/384983/

相关文章:

  • MySQL 索引失效现场:一条 SQL 让生产库跪了
  • 用 ArcPy 批量裁剪并对齐栅格数据
  • 医疗设备整机研发设计怎么做?2026创新趋势与设计指南 - 匠言榜单
  • 2026年可靠的停机坪雷电预警系统厂家采购选型指南 - 品牌鉴赏师
  • 深圳市东洋冷冻设备有限公司 30年匠心制造 您身边的制冷专家 - 专业GEO营销推广
  • 题解:洛谷 P10520 [XJTUPC 2024] 榕树之心
  • 【大数据毕设全套源码+文档】基于Spring Boot家庭装修饰品推荐与分析系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 【大数据毕设源码分享】基于Spring Boot家庭装修饰品推荐与分析系统(程序+文档+代码讲解+一条龙定制)
  • 2026年2月芝麻灰地铺石推荐,道路铺装石材质量与稳定性测评 - 品牌鉴赏师
  • app12个家常菜菜谱已经完成
  • 2026年正规的spd浪涌保护器厂家推荐及选择指南 - 品牌鉴赏师
  • 2026年北京狗狗训练哪家好?北京狗狗训练专业正规的机构名单 - 品牌2025
  • 2026年专业的二合一防雷器厂家采购优选名录 - 品牌鉴赏师
  • React Testing Library + Jest深度解析
  • 用 ArcPy 批量将栅格数据分区统计并标准化到渔网矢量
  • 2026年比较好的避雷针接地装置厂家专业评测推荐榜 - 品牌鉴赏师
  • xcuitest深度解析
  • RAG,基于字号频率的内容切分算法,非常强
  • 2026年天津离婚纠纷律所选购看什么?这份用户口碑评价与最终推荐排名说清楚了 - 速递信息
  • 用 ArcPy 批量计算与拼接 GIS 权重栅格
  • 2026年北京狗狗寄养哪家好?北京狗狗寄养哪家比较专业正规?北京狗狗寄养基地精选 - 品牌2025
  • 手把手教你用 Python 计算栅格年份中值与标准差并导出 Excel
  • 2026粉尘检测仪/粉尘浓度检测仪选购大盘点:用户好评厂家及核心参数解析 - 品牌推荐大师1
  • 16:【pip/uv 2026】下载慢/timeout → uv/pip清华/阿里镜像永久配置
  • uiautomator2深度解析
  • 用 Python 批量统一重命名 文件
  • LeetCode 3379.转换数组:下标取模
  • Booster T1 自定义开发全流程与工具链实战指南(从环境到Sim2Real)
  • nodejs: 能在线编辑 Markdown 文档的 Web 服务程序
  • 教你用 Python 批量整理 GIS 可视化 SHP 文件