首页 >> 基础教程
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
→ 全表扫描。
最新文章
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