企业级MySQL索引优化实战:高并发场景下的索引设计与调优

时间:2025-10-17 15:45

MySQL 索引极简教程

一、什么是索引?

索引就像书的目录:没有索引需要整本书翻找,有索引可以快速定位。

二、索引类型速查

| 索引类型 | 用途 | 示例 | |||| | 普通索引 | 加速查询 | ​​name​​ 字段 | | 唯一索引 | 保证唯一性 | ​​email​​ 字段 | | 主键索引 | 唯一标识 | ​​id​​ 字段 | | 组合索引 | 多字段查询 | ​​(city, age)​​ |

三、创建索引(3种方式)

  1. 建表时创建
CREATE TABLE users (
    id INT PRIMARY KEY,                    -- 主键索引
    name VARCHAR(50) INDEX,                -- 普通索引
    email VARCHAR(100) UNIQUE,             -- 唯一索引
    age INT,
    KEY idx_age (age)                      -- 命名索引
);
  1. 后期添加(最常用)
-- 普通索引
CREATE INDEX idx_name ON users(name);

-- 唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);

-- 组合索引
CREATE INDEX idx_city_age ON users(city, age);
  1. 修改表结构
ALTER TABLE users ADD INDEX idx_name (name);

四、应该给哪些字段加索引?

✅ 推荐加索引:

  • WHERE 条件字段:​​WHERE status = 'active'​
  • JOIN 连接字段:​​ON users.id = orders.user_id​
  • 排序字段:​​ORDER BY created_at DESC​
  • 经常查询的组合字段

❌ 不建议加索引:

  • 数据量很小的表
  • 频繁更新的字段
  • 区分度低的字段(如:性别、状态)

五、实战示例

场景:用户查询优化

-- 查询慢:需要全表扫描
SELECT * FROM users WHERE city = '北京' AND age > 25;

-- 解决方案:添加组合索引
CREATE INDEX idx_city_age ON users(city, age);

-- 再查询:速度飞快!

查看索引效果

-- 查看执行计划
EXPLAIN SELECT * FROM users WHERE city = '北京' AND age > 25;

-- 查看表索引
SHOW INDEX FROM users;

六、组合索引使用技巧

正确使用(最左前缀原则)

-- 索引:idx_city_age_gender
CREATE INDEX idx_city_age_gender ON users(city, age, gender);

-- ✅ 这些查询能用索引:
WHERE city = '北京'
WHERE city = '北京' AND age > 25
WHERE city = '北京' AND age = 30 AND gender = 'M'

-- ❌ 这些查询不能用索引:
WHERE age > 25                    -- 缺少 city
WHERE city = '北京' AND gender = 'M' -- 缺少 age

七、索引管理命令

查看索引

SHOW INDEX FROM table_name;

删除索引

DROP INDEX index_name ON table_name;

重建索引(优化性能)

ALTER TABLE table_name ENGINE=InnoDB;

八、常见错误

  1. 索引过多
-- 错误:每个字段都建索引
CREATE INDEX idx_name ON users(name);
CREATE INDEX idx_email ON users(email);
CREATE INDEX idx_phone ON users(phone);
-- 结果:写操作变慢,磁盘占用大
  1. 无效索引
-- 索引:idx_city_age
CREATE INDEX idx_city_age ON users(city, age);

-- ❌ 错误用法
WHERE age > 25  -- 无法使用索引(违反最左前缀)

九、性能检查清单

创建索引前问自己:

  • [ ] 这个字段经常在 WHERE 中使用吗?
  • [ ] 表的数据量是否足够大(>1万条)?
  • [ ] 字段的区分度是否足够高?
  • [ ] 是否会影响写操作性能?

创建索引后检查:

  • [ ] 使用 EXPLAIN 验证索引效果
  • [ ] 查询速度是否明显提升?
  • [ ] 写操作性能是否可以接受?

十、一句话总结

索引 = 用空间换时间

  • 空间:占用磁盘,降低写入速度
  • 时间:极大提升查询速度

最佳实践:在频繁查询的字段上创建索引,但不要过度索引。

快速开始

  1. 找出慢查询:​​SHOW PROCESSLIST;​
  2. 分析执行计划:​​EXPLAIN SELECT ...​
  3. 创建合适索引:​​CREATE INDEX idx_name ON table(column)​
  4. 验证效果:再次执行 ​​EXPLAIN​

按照这个指南,你可以在5分钟内为MySQL表添加合适的索引,让查询速度提升10倍以上! 另外搭配便捷的80kmMYSQL备份工具,可定时备份、异地备份,MYSQL导出导入。可本地连接LINUX里的MYSQL,简单便捷。可以大大地提高工作效率喔。

企业级MySQL日期处理规范:高效格式化方法与性能优化最佳实践
一些常见FTP客户端的下载方式
FTP默认使用两个端口号是什么
FTP默认使用两个端口号是什么,区别是什么
FTP端口号是多少,FTP默认使用两个端口号
FTP服务的优缺点与替代方案
ftp扫描软件,ftp扫描软件有哪些
ftp怎么打开,ftp打开方式
FTP协议,ftp的常见应用场景
如何使用WinSCP?