首页 >> 基础教程
1. 使用
2.
3.
mysql中如何查看是否用到了索引?
1. 使用 EXPLAIN 命令(最常用)
在 SQL 语句前添加 EXPLAIN 关键字,分析执行计划:
EXPLAIN SELECT * FROM your_table WHERE indexed_column = 'value';
解析:
type:访问类型(性能从优到劣):const/eq_ref/ref/range:使用了索引。index:全索引扫描(效率较低)。ALL:全表扫描(未用索引)。key:实际使用的索引名称(若为NULL表示未用索引)。possible_keys:可能用到的索引列表。rows:预估扫描行数(越小越好)。Extra:Using index:覆盖索引(仅用索引获取数据,高效)。Using where; Using index:索引被用于过滤数据。Using filesort或Using temporary:需优化(可能未用索引)。
2. EXPLAIN ANALYZE(MySQL 8.0+)
EXPLAIN ANALYZE SELECT * FROM your_table WHERE indexed_column = 'value';
3. SHOW INDEX 检查索引是否存在
SHOW INDEX FROM your_table;
实例:
情况1:使用了索引
EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
+----+-------------+-------+------+---------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+---------+---------+-------+------+-------+ | 1 | SIMPLE | users | ref | idx_email | idx_email | 768 | const | 1 | NULL | +----+-------------+-------+------+---------------+---------+---------+-------+------+-------+
key显示索引名idx_email→ 索引生效。type为ref→ 通过索引查找。
情况2:未使用索引
EXPLAIN SELECT * FROM users WHERE name = 'John'; -- 假设 name 无索引
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | users | ALL | NULL | NULL | NULL | NULL | 1000 | Using where | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+
key为NULL→ 未用索引。type为ALL→ 全表扫描。
最新文章
20.5 性能优化建议2026-05-08
20.4 复杂查询实现2026-05-08
20.3 表创建与数据初始化2026-05-08
20.2 数据库设计2026-05-08
20.1 项目需求分析:博客系统2026-05-08
19.4 自动化备份策略2026-05-08
19.3 导出和导入数据2026-05-08
19.2 恢复备份数据2026-05-05
19.1 使用mysqldump备份数据2026-05-05
18.4 实战:开发简单的学生管理系统2026-05-05

发表评论
所有评论