查看MySQL数据库中的索引是数据库管理和开发中常见的需求,通过了解表的索引情况,可以评估查询性能、排查索引失效问题,还能为索引优化提供依据。MySQL提供了多种查看索引的方式,不同方式的适用场景和返回信息各有差异,开发者可以根据实际需求选择合适的方法。

使用SHOW INDEX语句查看索引
SHOW INDEX是MySQL中查看表索引最直接、最常用的语句,语法简单,返回信息全面,适合快速查看单个表的索引详情。
基本语法
SHOW INDEX语句的基本格式如下:
-- 查看指定表的索引,可指定数据库名 SHOW INDEX FROM 表名 [FROM 数据库名]; -- 示例:查看test数据库下user表的索引 SHOW INDEX FROM user FROM test; -- 也可以直接切换到目标数据库后执行 USE test; SHOW INDEX FROM user;
返回字段含义
SHOW INDEX返回的结果包含多个字段,每个字段的含义如下:
| 字段名 | 含义说明 |
|---|---|
| Table | 索引所属的表名 |
| Non_unique | 索引是否允许重复值,0表示唯一索引,1表示非唯一索引 |
| Key_name | 索引的名称,主键索引名称默认为PRIMARY |
| Seq_in_index | 索引中的列序号,从1开始,复合索引会显示多行 |
| Column_name | 索引包含的列名 |
| Collation | 列的排序方式,A表示升序,NULL表示无排序 |
| Cardinality | 索引中唯一值的估算数量,值越大索引区分度越高 |
| Sub_part | 列的前缀索引长度,NULL表示整列索引 |
| Packed | 键的打包方式,NULL表示未打包 |
| Null | 列是否允许NULL值,YES表示允许 |
| Index_type | 索引类型,常见有BTREE、HASH、FULLTEXT、SPATIAL |
| Comment | 索引的备注信息 |
查询information_schema系统库查看索引
information_schema是MySQL自带的信息数据库,存储了所有数据库、表、索引等元数据信息,通过查询其中的STATISTICS表可以获取索引信息,这种方式适合需要批量查询多个表索引或者进行自定义筛选的场景。
基本查询示例
查询指定数据库下所有表的索引信息:
-- 查询test数据库下所有表的索引 SELECT TABLE_NAME AS 表名, INDEX_NAME AS 索引名, NON_UNIQUE AS 是否非唯一, COLUMN_NAME AS 索引列, INDEX_TYPE AS 索引类型 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'test' ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX;
如果需要查看某个具体表的索引,可以在WHERE条件中加上TABLE_NAME的筛选:
-- 查询test数据库下user表的索引 SELECT INDEX_NAME AS 索引名, COLUMN_NAME AS 索引列, INDEX_TYPE AS 索引类型, NON_UNIQUE AS 是否非唯一 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'user';
使用DESCRIBE/DESC命令查看索引
DESCRIBE或者简写DESC命令主要用于查看表结构,同时也会显示表的主键和索引相关信息,适合快速了解表的基本索引情况,返回的信息相对简洁。
语法如下:
-- 查看表结构及索引信息 DESC 表名; -- 或者 DESCRIBE 表名;
执行后结果中,Key列会标识列的索引情况:PRI表示主键,UNI表示唯一索引,MUL表示普通索引或者允许重复的索引。这种方式只能看到列的索引标识,无法查看完整的索引详情,比如复合索引的组成、索引类型等都无法获取。
不同查看方式的适用场景
- 如果需要快速查看单个表的完整索引详情,优先选择SHOW INDEX语句,信息最全面,语法最简单。
- 如果需要批量查询多个表的索引,或者需要按照自定义条件筛选索引信息,比如筛选所有唯一索引,选择查询information_schema.STATISTICS表的方式更合适。
- 如果只是快速确认表有没有主键、大概有哪些索引,不需要详细信息,使用DESC命令效率更高。
查看索引的注意事项
首先,查看索引需要有对应的权限,普通用户如果没有表的SELECT权限或者information_schema的查询权限,可能无法获取索引信息。其次,Cardinality字段的值是估算值,不是精确值,执行ANALYZE TABLE语句可以更新这个值的准确性,帮助更合理地评估索引效果。另外,删除索引前建议先通过上述方式查看索引信息,确认索引的作用,避免误删影响业务查询性能。
MySQL索引查看SHOW_INDEXinformation_schema数据库优化修改时间:2026-06-14 15:39:36