MySQL中查看索引信息有三类方法:1. SHOW INDEX FROM table_name 查完整详情;2. 查询 INFORMATION_SCHEMA.STATISTICS 表支持条件筛选;3. DESCRIBE table_name 快速识别字段索引类型。

在 MySQL 中查看索引信息,核心是获取表上已建索引的名称、字段、类型、唯一性等元数据。不同命令侧重点略有不同,下面按实用场景分三类说明。
查完整索引详情:用 SHOW INDEX
这是最常用、最直接的方式,适合快速确认索引是否存在、是否覆盖预期列、是否唯一等。
- 执行 SHOW INDEX FROM table_name; 或等价写法 SHOW KEYS FROM table_name;
- 返回字段关键含义:
• Key_name:索引名(PRIMARY 表示主键索引)
• Column_name:该索引包含的列名(组合索引会有多行)
• Seq_in_index:列在索引中的顺序(1 是最左列)
• Non_unique:0 表示唯一索引(含主键),1 表示允许重复
• Index_type:通常是 BTREE(InnoDB 默认),也可能是 FULLTEXT 或 SPATIAL
查指定库表的索引(支持条件筛选):查 INFORMATION_SCHEMA.STATISTICS
适合脚本化查询或跨多个表批量检查,比如想查某个数据库下所有带 “user_id” 的索引。
- SQL 示例:
SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME, NON_UNIQUE, INDEX_TYPE
FROM information_schema.STATISTICS
WHERE table_schema = 'your_db_name'
AND table_name = 'your_table_name'
ORDER BY INDEX_NAME, SEQ_IN_INDEX; - 注意:table_schema 必须准确填写数据库名,区分大小写(取决于系统配置);
若不确定当前库名,可用 SELECT DATABASE(); 先确认。
快速看结构是否带索引:用 DESCRIBE / DESC
不显示索引细节,但能一眼看出哪些字段有索引标记,适合开发时快速扫表结构。
- 执行 DESCRIBE table_name; 或简写 DESC table_name;
- 结果中 Key 列的值含义:
• PRI:主键索引
• UNI:唯一索引
• MUL:普通索引(允许重复,包括组合索引中非最左列)
• 空:无索引 - 局限:无法区分单列索引和组合索引里的中间列,也不显示索引名和类型,仅作初步判断。
索引结构本身(如 B+Tree)不对外暴露物理布局,但可通过 EXPLAIN SELECT ... 观察查询是否命中索引、是否用到覆盖索引、是否发生回表等行为,这是验证索引是否生效的关键手段。










