首页 >> 基础教程
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命令-mysqld_multi2025-08-14
mysql命令-mysqladmin2025-08-14
mysql命令-mysql_config_editor2025-08-12
mysql命令-myisamchk2025-08-11
mysql命令-ibd2sdi2025-08-11
mysql分页问题2025-08-04
千万数据先insert和先建索引哪个快2025-08-04
MySQL 中大小表关联查询如何优化2025-08-04
sql技巧-每个班年龄排前两名的人2025-08-03
MySQL 导致 cpu 飙升的话,要怎么处理呢?2025-07-29
