news 2026/6/11 4:28:00

MySQL 慢查询定位与 SQL 性能优化实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 慢查询定位与 SQL 性能优化实战指南

文章目录

  • 如何定位并解决慢查询?
    • 1. 开启/检查慢日志
    • 2. 分析日志
    • 3. 用explain分析执行计划
  • SQL优化?
    • 一、基础优化
      • 1. 避免select *
      • 2. 使用合适的where条件
      • 3. 合理使用索引
      • 4. 避免全表扫描
    • 二、JOIN优化(多表查询)
      • 1. 大表驱动小表
      • 2. 确保JOIN字段都有索引
      • 3. 避免多层嵌套JOIN
    • 三、子查询 vsJOIN
    • 分页优化
  • 如何创建、使用索引?
    • 索引介绍
    • 一、创建索引
      • 1. 创建普通索引
      • 2. 创建唯一索引
      • 3. 创建复合索引
      • 4. 在建表时直接定义索引
      • 5. 添加主键(自动添加聚簇索引)

如何定位并解决慢查询?

1. 开启/检查慢日志

  • 看一下是否开启慢日志
SHOWVARIABLESLIKE'slow_query_log';SHOWVARIABLESLIKE'long_query_time';SHOWVARIABLESLIKE'slow_query_log_file';
  • 如果未开启,临时开启(生产环境建议永久配置):
SETGLOBALslow_query_log=ON;SETGLOBALlong_query_time=1;

2. 分析日志

  • mysqldumpslow(MySQL 自带)
    # 按执行次数排序前10条mysqldumpslow -s c -t10/var/log/mysql/slow.log# 按总耗时排序前10条mysqldumpslow -s t -t10/var/log/mysql/slow.log

3. 用explain分析执行计划

  • 在SQL前面加explain
    EXPLAINSELECTid,order_noFROMordersWHEREuser_id=100ANDcreate_time>='2024-01-01'ORDERBYcreate_timeDESC;
    • 重点查看四个字段
字段看什么
type是否出现 ALL(全表扫描)
rows扫描行数是否过大
key是否使用到了正确索引
Extra是否出现Using filesortUsing temporary

SQL优化?

一、基础优化

1. 避免select *

-- ❌ 不推荐SELECT*FROMusers;-- ✅ 推荐SELECTid,name,emailFROMusers;

2. 使用合适的where条件

  • 尽量在where中使用索引字段
  • 避免对字段进行函数操作或类型转换(导致索引失效)
    -- ❌ 索引失效SELECT*FROMordersWHEREYEAR(create_time)=2024;-- ✅ 使用范围查询,可走索引SELECT*FROMordersWHEREcreate_time>='2024-01-01'ANDcreate_time<'2025-01-01';

3. 合理使用索引

  • 对经常用于where、join、order by、group by的列建立索引
  • 比卖你过度索引(影响写入性能)
  • 考虑使用复合索引(最左前缀原则)

4. 避免全表扫描

  • 通过explain检查是否使用了索引
    EXPLAINSELECT*FROMproductsWHEREcategory_id=10;

二、JOIN优化(多表查询)

1. 大表驱动小表

  • 在MySQL中,通常将小结果姐放在left,大表在right

2. 确保JOIN字段都有索引

  • 两个表关联字段都应该有索引

3. 避免多层嵌套JOIN

  • 复杂JOIN可拆分为多个简单查询

三、子查询 vsJOIN

  • 子查询在某些数据库中效率较低,可以尝试改成JOIN
    -- ❌ 子查询(可能低效)SELECT*FROMusersWHEREidIN(SELECTuser_idFROMordersWHEREamount>100);-- ✅ 改写为JOINSELECTDISTINCTu.*FROMusers uJOINorders oONu.id=o.user_idWHEREo.amount>100;

分页优化

  • 深分页(如LIMIT 100000,20)性能查,因为要跳过大量的数据
    • 优化方案:
      • 使用游标分页(基于上一页最后一条记录的ID或时间):
    SELECT*FROMmessagesWHEREid>100000ORDERBYidLIMIT20;

如何创建、使用索引?

索引介绍

索引类型说明
主键索引聚簇索引,数据按主键物理存储,每一张表只能一个
唯一索引不允许出现重复值
普通索引最基本的索引,允许重复和null
全文索引用于文本搜索
前缀索引对字符串类的前N个字段创建索引,节省空间
覆盖索引非独立类型,查询字段全部包含在索引中,无需回表

一、创建索引

1. 创建普通索引

-- 方法1:CREATE INDEX(推荐用于已有表)CREATEINDEXindex_nameONtable_name(column_name);-- 示例:在 users 表的 email 字段上创建索引CREATEINDEXidx_emailONusers(email);

2. 创建唯一索引

CREATEUNIQUEINDEXidx_usernameONusers(username);

3. 创建复合索引

  • 符合索引使用时必须遵循最左前缀原则,查询时必须包含最左边的列才能生效
-- 按顺序:先按 category_id,再按 created_at 排序CREATEINDEXidx_category_createdONproducts(category_id,created_at);

4. 在建表时直接定义索引

CREATETABLEorders(idBIGINTPRIMARYKEYAUTO_INCREMENT,user_idINTNOTNULL,statusVARCHAR(20),created_atDATETIME,-- 主键自动创建聚簇索引(InnoDB)INDEXidx_user_status(user_id,status),-- 普通复合索引UNIQUEINDEXuk_order_no(order_no)-- 唯一索引);

5. 添加主键(自动添加聚簇索引)

ALTERTABLEtable_nameADDPRIMARYKEY(id);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 2:56:41

Syncovery Pro(自动备份同步工具)

链接&#xff1a;https://pan.quark.cn/s/ae601001b7bbSyncovery Pro是目前功能最为强大的实时自动备份工具&#xff0c;连FTP、WebDAV等全部支持&#xff01;最近从V6开始改用比较 好记、易懂的新名称 SynCovery 了。功能与SuperFlexibleSynchronizer仍然完全相同。基本简介 与…

作者头像 李华
网站建设 2026/6/10 17:23:47

精益生产到底是什么?七大浪费、五大原则、九大方法,一次讲清

很多人提到精益生产&#xff0c;心里都有个问号&#xff1a;“这个到底和我们业务有啥关系&#xff1f;”“看上去那么复杂&#xff0c;是不是又是个管理噱头&#xff1f;”其实&#xff0c;精益生产的核心是消除浪费&#xff0c;提高效率。它不仅仅是理论&#xff0c;而是一整…

作者头像 李华
网站建设 2026/6/10 17:43:03

深入理解 MySQL Buffer Pool 核心机制:初始化、free 链表与数据页流转

在MySQL的InnoDB存储引擎中&#xff0c;Buffer Pool&#xff08;缓冲池&#xff09;是提升数据库读写性能的核心组件——它通过将磁盘上的热点数据页缓存到内存中&#xff0c;避免了频繁的磁盘IO操作&#xff0c;让大部分数据访问都能在内存中完成。本文将从Buffer Pool的初始化…

作者头像 李华
网站建设 2026/6/11 5:51:15

springboot基于vue的的电影信息网站的设计与实现_51lpd2kg

目录已开发项目效果实现截图开发技术系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&…

作者头像 李华
网站建设 2026/6/10 17:57:59

适合各行各业的开源万能表单源码系统 带完整的搭建部署教程

温馨提示&#xff1a;文末有资源获取方式这是一套经商业验证、功能完备的“交钥匙”工程&#xff0c;旨在帮助各行各业&#xff0c;以最小的技术投入&#xff0c;快速搭建起属于自己的信息交互与客户管理平台。源码获取方式在源码闪购网。一套系统&#xff0c;解决N个业务痛点&…

作者头像 李华
网站建设 2026/6/11 18:36:41

论文AI率90%→5%!DeepSeek四大降ai率指令+3款神器实测(保姆级教程)

从高校毕业论文到期刊审稿&#xff0c;2025年的AIGC检测已经成为了所有人的“噩梦”。很多同学拿着DeepSeek或GPT生成的论文去查&#xff0c;AI率直接飙红到90%。 别焦虑&#xff01;作为一个刚把AI率打下来的过来人&#xff0c;我发现&#xff1a;AI的痕迹其实是有迹可循的。…

作者头像 李华