首页 >> 基础教程

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





最新文章
mysql分页问题2025-08-04
千万数据先insert和先建索引哪个快2025-08-04
MySQL 中大小表关联查询如何优化2025-08-04
sql技巧-每个班年龄排前两名的人2025-08-03
MySQL 导致 cpu 飙升的话,要怎么处理呢?2025-07-29
MySQL 中为千万级大表添加字段2025-07-29
mysql中百万级别以上的数据如何删除2025-07-29
分库分表带来的问题2025-07-29
mysql中常用的分库分表中间件有哪些2025-07-29
mysql不停机扩容2025-07-29
备案号:蜀ICP备2023042032号-1