MySQL 索引极简教程
一、什么是索引?
索引就像书的目录:没有索引需要整本书翻找,有索引可以快速定位。
二、索引类型速查
| 索引类型 | 用途 | 示例 | |||| | 普通索引 | 加速查询 | name
字段 | | 唯一索引 | 保证唯一性 | email
字段 | | 主键索引 | 唯一标识 | id
字段 | | 组合索引 | 多字段查询 | (city, age)
|
三、创建索引(3种方式)
CREATE TABLE users (
id INT PRIMARY KEY, -- 主键索引
name VARCHAR(50) INDEX, -- 普通索引
email VARCHAR(100) UNIQUE, -- 唯一索引
age INT,
KEY idx_age (age) -- 命名索引
);
-- 普通索引
CREATE INDEX idx_name ON users(name);
-- 唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);
-- 组合索引
CREATE INDEX idx_city_age ON users(city, age);
ALTER TABLE users ADD INDEX idx_name (name);
四、应该给哪些字段加索引?
✅ 推荐加索引:
WHERE status = 'active'
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;
八、常见错误
-- 错误:每个字段都建索引
CREATE INDEX idx_name ON users(name);
CREATE INDEX idx_email ON users(email);
CREATE INDEX idx_phone ON users(phone);
-- 结果:写操作变慢,磁盘占用大
-- 索引:idx_city_age
CREATE INDEX idx_city_age ON users(city, age);
-- ❌ 错误用法
WHERE age > 25 -- 无法使用索引(违反最左前缀)
九、性能检查清单
创建索引前问自己:
创建索引后检查:
十、一句话总结
索引 = 用空间换时间
最佳实践:在频繁查询的字段上创建索引,但不要过度索引。
快速开始
SHOW PROCESSLIST;
EXPLAIN SELECT ...
CREATE INDEX idx_name ON table(column)
EXPLAIN
按照这个指南,你可以在5分钟内为MySQL表添加合适的索引,让查询速度提升10倍以上! 另外搭配便捷的80kmMYSQL备份工具,可定时备份、异地备份,MYSQL导出导入。可本地连接LINUX里的MYSQL,简单便捷。可以大大地提高工作效率喔。
企业级数据架构:MySQL递归查询在组织权限树中的高级应用实践
企业级MySQL时间管理实践:高并发场景下的性能优化与时区解决方案
【保姆级教程】MySQL主从复制最全配置指南,含监控脚本和故障处理
企业级MySQL高效查询方案:字符串匹配性能优化与全文检索最佳实践
运维基础技能:Linux服务器MySQL版本信息核查的标准化流程
企业级Docker MySQL部署方案:生产环境配置、数据持久化与网络隔离实践
企业级MySQL权限审计指南:从基础查询到安全合规的最佳实践