Mysql

一、EXPLAIN 执行计划

1. 基本语法

SELECT 语句前添加 EXPLAINDESC,即可查看 SQL 执行计划:

sql

复制代码
EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件;

2. 核心字段含义

表格

字段 含义
id 查询序列号,id 相同则从上到下执行;id 不同则值越大越先执行
select_type 查询类型,如 SIMPLE(简单查询)、PRIMARY(主查询)、UNION(联合查询)等
type 连接类型,性能从好到差:NULL > system > const > eq_ref > ref > range > index > ALL
possible_key 可能被使用的索引列表
key 实际使用的索引,为 NULL 表示未使用索引
key_len 索引使用的最大字节数,越短越好
rows 预估需要扫描的行数,InnoDB 中为估算值
filtered 返回行数占读取行数的百分比,值越大越好

二、索引使用规则

1. 验证索引效率

通过对比建索引前后的 SQL 耗时,验证索引效果:

  1. 无索引时执行查询: sql

    复制代码
    SELECT * FROM tb_sku WHERE sn = '100000003145001';
  2. 创建索引: sql

    复制代码
    CREATE INDEX idx_sku_sn ON tb_sku(sn);
  3. 再次执行相同查询,对比耗时。

2. 最左前缀法则

联合索引需从最左列开始查询,不能跳过中间列,否则后续列索引失效。

  • ✅ 有效:WHERE profession = '软件工程' AND age = 31 AND status = '0'
  • ❌ 部分失效:WHERE age = 31 AND status = '0'(跳过最左列 profession

3. 范围查询

联合索引中若出现 >/< 范围查询,范围查询右侧的列索引将失效

4. 索引失效场景

  • 字符串不加引号:字符串类型字段未加引号,索引失效。
  • 头部模糊查询LIKE '%xxx' 会导致索引失效;仅尾部模糊 LIKE 'xxx%' 可使用索引。
  • or 连接条件or 分割的条件中,若后一列无索引,则所有相关索引都不会被使用。
    • 示例:WHERE id = 10 OR age = 23,若 age 无索引,则 id 的索引也会失效。
  • 索引列运算:在索引列上进行函数 / 算术运算,索引失效。
  • 数据分布影响:若 MySQL 评估使用索引比全表扫描更慢,则会选择不使用索引。

三、SQL 性能分析工具

1. 慢查询日志

  • 记录执行时间超过 long_query_time(默认 10 秒)的 SQL。

  • 配置开启(/etc/my.cnf):

    ini

    复制代码
    slow_query_log=1
    long_query_time=2
  • 日志路径:/var/lib/mysql/localhost-slow.log

2. PROFILE 分析

查看 SQL 执行各阶段耗时:

sql

复制代码
-- 查看所有 SQL 耗时概况
SHOW PROFILES;
-- 查看指定 query_id 的 SQL 各阶段耗时
SHOW PROFILE FOR QUERY query_id;
-- 查看指定 query_id 的 SQL CPU 使用情况
SHOW PROFILE CPU FOR QUERY query_id;

3. SQL 执行频率统计

统计 INSERT/UPDATE/DELETE/SELECT 执行频次:

sql

复制代码
SHOW GLOBAL STATUS LIKE 'Com_______';

可查看 Com_selectCom_insert 等操作的累计次数。

相关推荐
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-03-28
数据库·人工智能·经验分享·神经网络·chatgpt
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB聚合框架(7)
数据库·学习·mongodb
城数派2 小时前
2015-2024年我国1km分辨率逐日地表温度(LST)栅格数据
数据库·arcgis·信息可视化·数据分析·excel
城数派3 小时前
中国全国土壤有机碳密度数据集(2010-2024年)
数据库·arcgis·信息可视化·数据分析·excel
鹓于3 小时前
CRX格式详解:安装、开发与反编译
数据库
夕除3 小时前
Mysql--10
mysql
IvorySQL3 小时前
PostgreSQL 技术日报 (3月28日)|零停机补丁、约束新特性、性能避坑全收录
数据库·postgresql·开源
smchaopiao3 小时前
数据库优化技巧详解:从LIMIT到索引的提升策略
数据库·oracle
清水白石0083 小时前
Python 编程全景解析:四大核心容器的性能较量、语义之美与高阶实战
开发语言·数据库·python