首页 >> 基础教程
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→ 全表扫描。
最新文章
13.6 EXPLAIN语句:查看查询执行计划2026-04-08
13.5 索引使用原则:什么时候建索引?2026-04-08
13.4 查看和删除索引2026-04-08
13.3 索引类型:B树、哈希、全文索引2026-04-08
13.2 创建索引:CREATE INDEX2026-04-08
13.1 什么是索引?为什么需要它?2026-04-08
12.5 联合查询:UNION和UNION ALL2026-04-07
12.4 相关子查询2026-04-07
12.3 FROM子句中的子查询2026-04-06
12.2 WHERE子句中的子查询2026-04-05

发表评论
所有评论