在mysql数据库的使用过程中,索引是提升查询性能的核心组件,掌握查看表索引信息的方法是开发者和运维人员必备的技能,通过查看索引信息可以确认索引是否生效、是否存在冗余索引等问题。

使用SHOW INDEX命令查看
SHOW INDEX是mysql中查看表索引信息最常用的命令,语法简单且返回的信息全面,基本可以满足大部分查看需求。
基础语法
查看指定表的索引信息,语法如下:
-- 查看test库下user表的索引信息 SHOW INDEX FROM user FROM test; -- 也可以简化写法,先切换到对应库再执行 USE test; SHOW INDEX FROM user;
返回结果字段说明
执行上述命令后,会返回如下表格中的字段,每个字段的含义如下:
| 字段名 | 含义说明 |
|---|---|
| Table | 索引所属的表名称 |
| Non_unique | 索引是否允许重复值,0表示唯一索引,1表示非唯一索引 |
| Key_name | 索引的名称,主键索引的名称默认为PRIMARY |
| Seq_in_index | 索引中该字段的位置,从1开始计数,联合索引会显示多个记录 |
| Column_name | 索引包含的字段名称 |
| Collation | 字段在索引中的排序方式,A表示升序,NULL表示无排序 |
| Cardinality | 索引的基数,代表索引中唯一值的估计数量,值越大索引区分度越高 |
| Index_type | 索引的类型,常见的有BTREE、HASH、FULLTEXT等 |
查询information_schema系统库获取索引信息
除了SHOW INDEX命令,还可以通过查询mysql的information_schema系统库中的STATISTICS表来获取索引信息,这种方式更适合需要批量查询或者结合其他条件筛选的场景。
基础查询示例
查询指定表的索引信息,语法如下:
-- 查询test库下user表的所有索引信息 SELECT TABLE_NAME, NON_UNIQUE, INDEX_NAME, SEQ_IN_INDEX, COLUMN_NAME, INDEX_TYPE FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'user' ORDER BY INDEX_NAME, SEQ_IN_INDEX;
场景扩展
如果需要查看整个数据库中所有表的索引数量,或者查找某个库中冗余的索引,都可以通过对STATISTICS表进行条件筛选和聚合查询实现,比SHOW INDEX命令更灵活。
使用DESCRIBE命令查看简略索引信息
如果只是需要快速查看表的字段和索引的简略对应关系,不需要详细的索引属性,可以使用DESCRIBE命令,该命令会返回表的字段结构,同时标记出主键和索引相关的信息。
语法如下:
-- 查看user表的结构,包含简略索引信息 DESCRIBE test.user; -- 也可以使用简写DESC DESC test.user;
执行后结果中,Key列会标记字段的索引属性:PRI表示主键,UNI表示唯一索引,MUL表示普通索引或者允许重复的索引。
不同查看方式的适用场景
- 如果需要快速查看单个表的详细索引属性,优先使用
SHOW INDEX命令,输出直观且信息全面。 - 如果需要批量查询多个表的索引信息,或者需要结合其他条件筛选索引,优先查询information_schema.STATISTICS表。
- 如果只是快速确认表的字段是否有索引,不需要详细属性,使用DESCRIBE命令效率更高。
注意:查询索引信息需要有对应表的SELECT权限,如果是普通用户没有权限访问information_schema库,可能无法通过系统表查询索引信息,此时可以使用SHOW INDEX命令尝试获取。
mysql查看表索引索引信息SHOW_INDEX修改时间:2026-06-16 21:51:28