首页 >> 基础教程

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 → 全表扫描。





发表评论

昵称:
联系方式:
评论内容:

所有评论

最新文章
指数平滑法是什么?2026-03-04
mysql命令-mysqlimport2026-02-01
mysql命令-mysql_tzinfo_to_sql2026-02-01
mysql命令-mysql2026-02-01
mysql命令-my_print_defaults2026-02-01
mysql命令-mysqldumpslow2026-02-01
mysql命令-mysqld2026-02-01
mysql命令-mysql_secure_installation2026-02-01
mysql命令-myisampack2026-02-01
mysql命令-perror2026-02-01
备案号:蜀ICP备2023042032号-1