首页 >> 基础教程

mysql中如何查看是否用到了索引?

1. 使用 EXPLAIN 命令(最常用)

在 SQL 语句前添加 EXPLAIN 关键字,分析执行计划:

EXPLAIN SELECT * FROM your_table WHERE indexed_column = 'value';

解析:

  1. type:访问类型(性能从优到劣):

    1. const/eq_ref/ref/range使用了索引

    2. index:全索引扫描(效率较低)。

    3. ALL全表扫描(未用索引)。

  2. key:实际使用的索引名称(若为 NULL 表示未用索引)。

  3. possible_keys:可能用到的索引列表。

  4. rows:预估扫描行数(越小越好)。

  5. Extra

    1. Using index覆盖索引(仅用索引获取数据,高效)。

    2. Using where; Using index:索引被用于过滤数据。

    3. 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
关于我 备案号:蜀ICP备2023042032号-1