MySQL中查看索引信息最常用方法是SHOW INDEX语句和查询INFORMATION_SCHEMA.STATISTICS表;前者快速查看单表索引详情,后者支持跨库筛选;EXPLAIN用于验证索引是否生效,结合索引大小、基数等可全面评估索引设计合理性。

在 MySQL 中查看索引信息,最常用且直接的方式是使用 SHOW INDEX 语句或查询 INFORMATION_SCHEMA.STATISTICS 系统表。不同方式适用于不同场景,下面分几种实用方法说明。
使用 SHOW INDEX 查看表的索引详情
这是最简单快捷的方法,适合快速确认某张表有哪些索引、字段顺序、是否唯一等基础信息。
- 语法:
SHOW INDEX FROM 表名 [FROM 数据库名]; - 例如:
SHOW INDEX FROM users;或SHOW INDEX FROM users FROM mydb; - 返回结果中关键字段说明:
Table:表名
Key_name:索引名称(PRIMARY 表示主键,自定义名如 idx_email)
Column_name:索引包含的列名(注意顺序)
Seq_in_index:该列在联合索引中的位置(1 表示第一列)
Non_unique:0 表示唯一索引,1 表示非唯一
Index_type:BTREE、HASH(Memory 引擎)、FULLTEXT 等
通过 INFORMATION_SCHEMA 查询索引(支持条件筛选)
当需要跨库查索引、按列名过滤、或写脚本批量分析时,推荐查系统表,更灵活。
- 基本查询:
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = '数据库名' AND TABLE_NAME = '表名'; - 只看非主键的普通索引:
WHERE INDEX_NAME != 'PRIMARY' - 查某个字段参与了哪些索引:
AND COLUMN_NAME = 'email' - 注意:
SEQ_IN_INDEX > 1表示是联合索引的后续列,需结合INDEX_NAME和SEQ_IN_INDEX判断完整结构
用 EXPLAIN 辅助验证索引是否生效
SHOW INDEX 只告诉你“有什么索引”,而 EXPLAIN 能告诉你“查询时用了哪个索引”。
- 执行:
EXPLAIN SELECT * FROM users WHERE email = 'a@b.com'; - 重点关注字段:
key:实际使用的索引名(NULL 表示未命中)
key_len:索引使用长度(可推断是否用全联合索引)
possible_keys:可能用到的索引列表 - 配合
SHOW INDEX结果,能判断索引设计是否合理(比如联合索引 (a,b,c),WHERE a=1 AND b=2 会用上,但 WHERE b=2 就不会)
查看索引大小与统计信息(高级用途)
对于性能调优,有时还需知道索引占了多少空间、数据分布是否均匀。
- 查索引大小(近似值):
SELECT DATA_LENGTH, INDEX_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名'; - 更新索引统计(影响优化器选择):
ANALYZE TABLE 表名;(InnoDB 通常自动收集,但大表手动触发更准) - 查看索引基数(Cardinality):
SHOW INDEX结果中的 Cardinality 列,数值越大说明该列区分度越高,越适合作为索引首列










