在mysql数据库运维和开发中,了解表的索引状态和类型是优化查询性能的基础工作,通过系统提供的指令可以快速获取这些信息,不需要借助第三方工具。

使用SHOW INDEX指令查看索引状态
mysql中最常用的查看表索引信息的指令是SHOW INDEX,它可以返回指定表的所有索引的详细状态信息,语法格式如下:
-- 查看指定表的索引信息,table_name替换为实际表名,db_name替换为数据库名 SHOW INDEX FROM table_name FROM db_name; -- 也可以省略数据库名,默认使用当前选中的数据库 SHOW INDEX FROM table_name;
执行该指令后返回的结果包含多个字段,每个字段都对应索引的不同状态信息,核心字段含义如下:
| 字段名 | 含义说明 |
|---|---|
| Table | 索引所属的表名 |
| Non_unique | 索引是否允许重复值,0表示唯一索引,1表示非唯一索引 |
| Key_name | 索引的名称,主键索引的名称默认为PRIMARY |
| Seq_in_index | 索引中的列序号,从1开始,联合索引会显示多个列的顺序 |
| Column_name | 索引关联的列名 |
| Collation | 列在索引中的排序方式,A表示升序,NULL表示无排序 |
| Cardinality | 索引的基数,代表索引中唯一值的估计数量,值越大索引区分度越高 |
| Index_type | 索引的类型,常见值有BTREE、HASH、FULLTEXT、SPATIAL |
通过返回结果判断索引类型
从SHOW INDEX的返回结果中,我们可以通过两个字段判断索引的类型:
- 通过
Non_unique字段判断是否为唯一索引:如果值为0,说明是唯一索引,包括主键索引和唯一约束索引;如果值为1,说明是普通非唯一索引。 - 通过
Index_type字段判断索引的存储类型:常见的是BTREE索引,也是mysql默认的索引类型,适合范围查询和排序;HASH索引只适用于等值查询;FULLTEXT是全文索引,用于文本内容的检索;SPATIAL是空间索引,用于地理空间数据类型。
比如我们查看user表的索引信息,执行指令:
SHOW INDEX FROM user;
如果返回结果中Key_name为PRIMARY,Non_unique为0,说明这是主键索引;如果Key_name为idx_email,Non_unique为1,Index_type为BTREE,说明这是普通BTREE索引。
查看索引的统计状态信息
如果需要查看索引的使用统计情况,比如索引被查询使用的次数,可以查询information_schema库的STATISTICS表,这个表存储了所有表的索引元数据,查询语法如下:
-- 查看指定表的索引统计信息,db_name为数据库名,table_name为表名 SELECT * FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'table_name';
另外如果要查看索引的使用频率,还可以开启mysql的索引监控功能,或者通过慢查询日志结合EXPLAIN指令分析查询是否使用了目标索引,从而判断索引的实际生效状态。
注意事项
SHOW INDEX指令需要有对应表的SELECT权限才能执行。Cardinality的值是预估值,不是精确值,mysql会在表数据发生较大变化时自动更新,也可以手动执行ANALYZE TABLE table_name指令更新统计信息。- 如果表没有创建任何索引,执行
SHOW INDEX会返回空结果集。
mysql索引状态索引类型SHOW_INDEX修改时间:2026-07-20 12:09:22